Tag: opengl

OpenCL到OpenGL纹理问题

我正在尝试使用OpenCL绘制到我从OpenGL纹理获得的cl_image,然后渲染该纹理。 问题是当我在CL_DEVICE_TYPE_CPU上运行我的代码时,它工作正常但是当我在CL_DEVICE_TYPE_GPU上运行时,纹理似乎是一些随机像素。 我是OpenCL的新手,不知道发生了什么,所以我将在下面发布代码,也在OSX上使用OpenCL。 主机代码: #import “GLView.h” #import #import #import “kernel.cl.h” #define WIDTH 500 #define HEIGHT 500 static GLfloat squareVertexData[] = { -0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.5f, 0.5f, 0.0f, 1.0f, 1.0f, -0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 0.5f, 0.5f, 0.0f, 1.0f, 1.0f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f }; @interface GLView () […]

创建本机C ++ OpenGL 3D编辑器并将其用作C#中的WinForms或WPF控件

我想创建一个简单的3D编辑器程序,我不喜欢C ++ windows编程。 但是,我也不想在使用OpenGL时弄乱托管代码。 因此,可以在本机C ++中创建一个控件,它将托管OpenGL 3D绘图表面,没有其他控件,也有接口(方法和属性),并将其用作WinForms中的控件,甚至更好,WPF申请?

OpenGL旋转2D纹理

UPDATE 请参阅底部以获取更新 我一直在寻找很多互联网,我找到了一些教程,解释了我想要实现的目标,但我无法让它工作,教程不完整或不适用于我的代码。 我正在尝试像在原点(中心)周围旋转2D图像一样简单的事情。 我使用xStart,xEnd,yStart和yEnd来翻转0或1的纹理。 这就是代码的样子 GameRectangle dest = destination; Vector2 position = dest.getPosition(); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, this->image); //If the rotation isn’t 0 we’ll rotate it if (rotation != 0) { glMatrixMode(GL_TEXTURE); glLoadIdentity(); glTranslatef(0.5, 0.5, 0); glRotatef(rotation, 0, 0, 1); glMatrixMode(GL_PROJECTION); } glBegin(GL_QUADS); glTexCoord2d(xStart,yStart); glVertex2f(position.x, position.y); glTexCoord2d(xEnd,yStart); glVertex2f(position.x + this->bounds.getWidth(), position.y); glTexCoord2d(xEnd,yEnd); glVertex2f(position.x + this->bounds.getWidth(), position.y […]

cmake在OS X上找不到gl.h

我在OS X 10.10上尝试用GLUT和OpenGL构建一个C’项目’。 我把它简化为一个展示我的问题的最小例子。 我有以下CMakeLists.txt : cmake_minimum_required(VERSION 2.8) FIND_PACKAGE(OpenGL REQUIRED) FIND_PACKAGE(GLUT REQUIRED) if(OpenGL_FOUND) # never true, but printed as true link_directories(${OpenGL_LIBRARY_DIRS}) include_directories(${OpenGL_INCLUDE_DIR}) endif(OpenGL_FOUND) if(GLUT_FOUND) link_directories(${GLUT_LIBRARY_DIR}) include_directories(${GLUT_INCLUDE_DIR}) endif(GLUT_FOUND) # print all vars because wtf get_cmake_property(_v VARIABLES) foreach(_v ${_v}) message(STATUS “${_v}=${${_v}}”) endforeach() add_executable(main main.c) target_link_libraries(main ${GLUT_LIBRARY} ${OPENGL_LIBRARY}) main.c只是一个虚拟包括两个标题: #include #include int main() { return 0; } 现在, […]

使用libpng将OpenGL屏幕像素保存到PNG

我一直在使用SOIL来保存图像作为BMP,但事实certificateSOIL(或stbi更具体)可以节省~5MB图像(大约1366×768分辨率图像或更多),这非常疯狂。 原始BMP保存代码( 注意一切都在渲染function中完成): uint8_t *pixels = new uint8_t[w * h * 3]; // copy pixels from screen glBindTexture(GL_TEXTURE_2D, screenTex); glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, w, h); glPixelStorei(GL_PACK_ALIGNMENT, 1); glReadPixels(0, 0, w, h, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid *)pixels); // invert pixels (stolen from SOILs source code) for (int j = 0; j * 2 0; –i) […]

QOpenGLFunctions_4_3_与QOpenGLContext :: versionFunctions的兼容性

我正在尝试使用兼容性配置文件从http://www.kdab.com/opengl-in-qt-5-1-part-5/ (包含源代码)编译Tesselation的示例,它只是无法加载此配置文件: 我做过的次要(也是唯一的)修改: @ terraintessellationscene.h: QOpenGLFunctions_4_3_Compatibility* m_funcs; @ terraintessellationscene.cpp: m_funcs = m_context->versionFunctions(); if ( !m_funcs ) { qFatal(“Requires OpenGL >= 4.0”); exit( 1 ); } m_funcs->initializeOpenGLFunctions(); 当我调用versionFunctions()时它就崩溃了。 它应该工作。 我可以使用任何Core Profile桌面配置文件编译此源和其他几个不同复杂程度的项目。 我将在稍后尝试使用GLEW来查看此问题是否与QT或我对QT或我的opengl驱动程序的使用有关。 我正在使用AMD的14.4 WHQL。 我试图使用预先构建的5.3源代码和5.3自编译的静态版本。 我已经尝试了两个旧的AMD驱动程序,看看这是否是AMD提供的OpenGL软件包的问题,​​但它失败了。 我真的想使用versionFunctions。 更新2 在正确设置QSurfaceFormat(QOpenGLContext :: setFormat(格式)之后,似乎QOpenGLContext create()完全拒绝兼容性设置(format.setProfile(QSurfaceFormat :: CompatibilityProfile)并创建Core Profile上下文,完全忽略了我的请求兼容性上下文,但作为不能遵循QSurfaceFormat格式规则的成功操作返回true。 更新3 好吧,我刚刚发现了这个问题,它与我的修改无关,它在kdab的原始代码中: // Create an OpenGL context m_context = new QOpenGLContext; […]

GlGenTextures保持0的回归

我正在尝试生成这样的纹理: #define checkImageWidth 64 #define checkImageHeight 64 static GLubyte checkImage[checkImageHeight][checkImageWidth][4]; static GLubyte otherImage[checkImageHeight][checkImageWidth][4]; static GLuint texName[2]; void makeCheckImages(void) { int i, j, c; for (i = 0; i < checkImageHeight; i++) { for (j = 0; j < checkImageWidth; j++) { c = ((((i&0x8)==0)^((j&0x8))==0))*255; checkImage[i][j][0] = (GLubyte) c; checkImage[i][j][1] = (GLubyte) c; checkImage[i][j][2] = (GLubyte) […]

放大鼠标的算法(OpenGL)

我有一个左上角坐标系的OpenGL场景。 当我glScale时,它从左上角的(0,0)放大。 我希望它从鼠标的坐标(相对于OGL框架)放大。 这是怎么做到的? 谢谢

Pre Z缓冲区通过OpenGL?

我怎样才能使用openGL进行Z缓冲预处理。 我试过这个: glcolormask(0,0,0,0); //disable color buffer //draw scene glcolormask(1,1,1,1); //reenable color buffer //draw scene //flip buffers 但它不起作用。 这样做后我什么也没看到。 有什么更好的方法呢? 谢谢

在OpenGL中,我可以绘制一个完全在坐标(5,5)处的像素吗?

通过(5,5)我的意思是第五行和第五列。 我发现使用屏幕坐标绘制东西非常困难,OpenGL中的所有坐标都是相对的,通常在-1.0到1.0之间。 为什么阻止程序员使用屏幕坐标/窗口坐标是如此严重?