Tag: opengl

纯C中的Cocoa OpenGL窗口?

我想在MacOSX中打开一个OpenGL窗口(以显示和抓取击键/鼠标事件)。 我不想使用Glut(因为它要求它是根线程)。 我不想学习目标C. 反正有无法在纯C中访问OpenGL API吗? 谢谢!

如何在OpenGL中绘制连接的条带线

我想以下面的方式绘制一系列连接线(GL_LINE_STRIP)。 我试过自己编码,但没有得到理想的结果,所以我来到这里,帮我找出错误的地方。 这里我只给出我的draw()函数。 glBegin(GL_LINE_STRIP); glVertex2f(-4.00, 0.00); glVertex2f(-3.00, 2.00); glVertex2f(-2.00, 0.00); glVertex2f(-1.00, 2.00); glVertex2f(0.0, 0.00); glVertex2f(1.00, 2.00); glVertex2f(2.00, 0.00); glVertex2f(3.00, 2.00); glVertex2f(4.00, 0.00); glEnd();

OpenGL中的位图渲染方法?

我最近在纯C中一直在研究一点位图解析器,只是为了理解更简单的图像格式的低级工作。 到目前为止,使用维基百科关于位图文件的文章 ,我能够(至少我认为)正确地解析信息 – 至少,大部分都是如此。 问题是我不太确定该怎么做:因为我一直在使用3.1上下文,我可以访问更多现代化的function,这很好,尽管我还是迷路了。 我有一个使用GLFW的窗口设置,到目前为止还没有真正渲染任何东西,因为我一直专注于解析/低级细节。 由于我正在努力避免查看实际的代码示例, 如果有人能够向我解释渲染位图背后的过程是什么,只使用OpenGL / GLFW和ISO C标准库,那就太酷了。 虽然我有几个着色器,并且我能够毫无问题地加载它们,但我认为我需要做的是渲染一个符合尺寸(宽度,高度)的[不可见]四边形。图像本身,然后将像素数据传递给OpenGL。 然而,主要问题是着色器的设置如下: 顶点着色器 #version 150 #extension GL_ARB_separate_shader_objects : enable layout(location = 0) in vec2 Position; layout(location = 1) in vec2 UV_In; out vec2 UV; void main() { gl_Position = vec4( Position, 0.0f, 1.0f ); UV = UV_In; } 片段着色器 #version 150 #extension GL_ARB_separate_shader_objects […]

在OpenGL中绘制2D纹理

我有一个名为DrawImage的绘图函数,但它确实令人困惑,只能使用特殊forms的重塑函数,因此我有两个问题: 如何在OpenGL中绘制纹理? 我只想创建一个获取纹理,x,y,宽度,高度和角度的函数,然后绘制它并根据参数绘制它。 我想定期将它画成GL_QUAD,但我不知道该怎么做.-。 人们说我应该使用SDL或SFML这样做,是否推荐? 如果是的话,你能给我一个加载纹理的简单函数吗? 我目前正在使用SOIL来加载纹理。 function如下: void DrawImage(char filename, int xx, int yy, int ww, int hh, int angle) { glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, filename); glLoadIdentity(); glTranslatef(xx,yy,0.0); glRotatef(angle,0.0,0.0,1.0); glTranslatef(-xx,-yy,0.0); // Draw a textured quad glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex2f(xx,yy); glTexCoord2f(0, 1); glVertex2f(xx,yy + hh); glTexCoord2f(1, 1); glVertex2f(xx + ww,yy + hh); glTexCoord2f(1, 0); glVertex2f(xx + ww,yy); […]

如何用不同于边界的颜色填充多边形?

我需要绘制一个边界线为一种颜色的多边形,并用另一种颜色填充内部。 是否有捷径可寻 ? 我目前绘制两个多边形,一个用于内部颜色,一个用于边界。 我认为必须做得更好。 谢谢你的帮助。 glColor3d(1,1。,。7); glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); 在glBegin(GL_TRIANGLES); glVertex3f(-0.8f,0.0f,0.0f); glVertex3f(-0.6f,0.0f,0.0f); glVertex3f(-0.7f,0.2f,0.0f); glEnd(); glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); glColor3d(.5,.5,.7); 在glBegin(GL_TRIANGLES); glVertex3f(-0.8f,0.0f,0.0f); glVertex3f(-0.6f,0.0f,0.0f); glVertex3f(-0.7f,0.2f,0.0f); glEnd(); 谢谢大家回答我的问题。 我对openGL很新,并且正在寻找一个简单问题的简单答案。 答案似乎并非如此简单,可能需要花费一个学期的学习时间。

glColor4f() – alpha值的效果

我正在使用glColor4f()。 令人惊讶的是,更改alpha,即第四个参数不会导致透明度发生任何变化。 代码段是: const GLfloat squareVertices[] = { 0.5, 0.5, 0.0, -0.5, 0.5, 0.0, 0.5, -0.5, 0.0, -0.5, -0.5, 0.0}; glEnableClientState (GL_VERTEX_ARRAY); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glColor4f (1.0, 0.0, 0.0, 0.5); glLoadIdentity (); glTranslatef(0, 0, -5); glVertexPointer(3, GL_FLOAT, 0, squareVertices); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 任何指向我可能出错的地方?

如何在保持纹理坐标正确的同时使用glDrawElements?

我正在使用/目标OpenGL 4.20,GSLSL 4.20,核心。 使用C. 我正在使用OpenGL探索图形,并决定制作基于图块的游戏。 我正在想要实际绘制一堆瓷砖,我正在尝试使用glDrawElements绘制单个三角形。 相关代码: const float vertexPositions[] = { -1.0f, -0.8f, //0 -0.8f, -0.8f, //1 -0.6f, -0.8f, //2 -0.4f, -0.8f, //3 -0.2f, -0.8f, //4 0.0f, -0.8f, //5 -1.0f, -1.0f, //6 -0.8f, -1.0f, //7 -0.6f, -1.0f, //8 -0.4f, -1.0f, //9 -0.2f, -1.0f, //10 0.0f, -1.0f, //11 //The following are the texture coordinates. 0.00f, […]

纯C中是否有易于使用的矢量/矩阵/四元数学库?

我意识到有几个c ++库,但我更喜欢C.我发现了这个,但它似乎只适用于Mac: https : //github.com/rsebbe/CeedMath

Visual Studio 2010中的SOIL设置

我无法使用Visual Studio 2010正常工作 – 我远不是VS的专家,但据我所知,只有以下步骤才能使环境正常工作: 属性>> C / C ++>常规>>其他包含目录添加到SOIL.h的路径中 属性>>链接器>>常规>>附加库目录添加到libSOIL.a的路径 我也使用免费的GLUT,并且这里也设置了glut文件的路径 – 我还将Dubugging >> Environment Path设置为GLUT bin文件。 当我使用SOIL_load_OGL_texture时,我收到以下错误: 错误LNK2019:函数“void __cdecl init(void)”中引用了未解析的外部符号_SOIL_load_OGL_texture(?init @@ YAXXZ) 尝试将libSOIL.a重命名为libSOIL.lib和SOIL.lib,但它不起作用。 然后我构建了VC8项目并使用了.lib,如此处所示, SOIL没有正确链接,但也没有用。 我在他们的主页上使用示例代码 GLuint tex_2d; tex_2d = SOIL_load_OGL_texture ( ” C:\\Sunset.png”, SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_MIPMAPS | SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT ); /* check for an error during the load process […]

OpenGL – 2D纹理映射

我正在尝试将简单的纹理(64×64)渲染为64×64四边形。 四边形本身是渲染,但不是纹理。 (它呈现一个空白的64×64四边形。) 我正在使用SOIL加载图像。 static GLuint LoadPNG(char* filename) { GLuint texture = SOIL_load_OGL_texture ( filename, SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT ); if (texture == 0) Log(“Texture Load Error: ” + string(filename)); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); return texture; } 这是我的渲染代码,我可能没有正确映射它,所以这也可能是问题。 // Draw Textured Quad static void glDrawTexturedQuad(glRectF rect, GLuint tex) { // […]