草庐IT

c++ - 为什么这个 OpenGL Shader 分段在调用 glCreateShader 时会出错?

我正在尝试学习如何编写OpenGL着色器。为什么这段代码在我的机器上运行时会段错误?(我使用的是Ubuntu10.04,我将其命名为shader.cpp。)#include#includeusingnamespacestd;intmain(intargc,char**argv){GLuintmyVertexShader=glCreateShader(GL_VERTEX_SHADER);return0;}我正在使用以下Makefile编译它:CC=g++CFLAGS=-c-Wall-DGL_GLEXT_PROTOTYPESLDFLAGS=-lglut-lGLU-lGL-lXmu-lXex

c++ - 颜色少于顶点

在旧的已弃用的OpenGL中,我们可以这样做:glBegin(...);glColor3f(r_1,g_1,b_1);glVertex3f(x_1,y_1,z_1);glVertex3f(x_2,y_2,z_2);...glVertex3f(x_n,y_n,z_n);glColor3f(r_2,g_2,b_2);glVertex3f(x_(n+1),y_(n+1),z_(n+1));glVertex3f(x_(n+2),y_(n+2),z_(n+2));...glVertex3f(x_2n,y_2n,z_2n);...glEnd();也就是说,我是说每n个连续的顶点共享相同的颜色。是否

c++ - 为什么要使用 glTranslatef?为什么不直接更改渲染坐标?

我正在使用C++使用OpenGL和SDL制作一个简单的Pacman游戏。我打算使用glTranslatef函数,但仅更改绘图函数使用的坐标似乎更简单。我想知道,你为什么/应该使用glTranslatef?这里有一个简单的例子,既有glTranslatef又有简单地改变坐标glPushMatrix()glTranslatef(10,0,0)draw()glPopMatrix()或//Assumingthedrawfunctiontookco-ordsdraw(x+10,y,z)我唯一的猜测是它们实际上是相同的,这只是偏好。能教教我吗?编辑请注意,我只是在谈论翻译功能。关于缩放和旋转的一切

c++ - 如何通过 EGL 创建 OpenGL 3.3 或 4.x 上下文

我有兴趣制作一个不依赖于X11的OpenGL应用程序。如我所见,这应该可以通过EGL实现。网上什至有例子。但是我怎样才能控制上下文版本呢?下面的示例代码创建了一个版本为2.1的OpenGL上下文(在wayland上),但在我的计算机上它显示支持的最高OpenGL版本是3.3(这样的上下文可以使用glXCreateContextAttribsARB在X服务器中使用GLX和xlib创建)。所以我的问题是:我可以通过EGL以某种方式创建更高版本的OpenGL上下文吗?如果可以,如何创建?示例代码:#include#include#include#include#include#include

c++ - 未定义的 vtable 引用,Linux 中的 Qt

我试图在Ubuntu10.04中的Code::Blocks下编译Qt和OpenGL程序。我得到“对GLWidget的vtable的undefinedreference”#ifndef_GLWIDGET_H#define_GLWIDGET_H#include#include"stdlib.h"classGLWidget:publicQGLWidget{Q_OBJECT//mustincludethisifyouuseQtsignals/slotspublic:GLWidget(QWidget*parent=0);~GLWidget();protected:voidinitializeGL

c++ - 学习正确使用 VBO

所以我一直在尝试自学使用VBO,以提高我的OpenGL项目的性能并学习比固定功能渲染更高级的东西。但是我还没有找到很多像样的教程。到目前为止我发现的最好的是Songho'stutorials和OpenGL.org的东西,但我似乎缺少某种背景知识来完全理解正在发生的事情,虽然我不能确切地说出我没有得到的是什么,但请保存一些参数的用法。无论如何,我一直在努力,并提出了一些至少不会崩溃的蚕食代码,但它会导致奇怪的结果。我要渲染的是这个(使用固定功能渲染;它应该是棕色和背景灰色,但我所有的OpenGL屏幕截图似乎都采用洋红色作为他们最喜欢的颜色;可能是因为我使用SFML作为窗口?)。不过,我得

c++ - 向由顶点构成的平面添加纹理

我用这段代码在OpenGL中创建了一个平面:glBegin(GL_TRIANGLE_STRIP);glColor4f(0.8,0.8,0.5,1.0);glVertex3f(startlen,height,startwid);glVertex3f(startlen,height,startwid+width);glVertex3f(startlen+length,height,startwid);glVertex3f(startlen+length,height,startwid+width);glEnd();现在我想在这个平面上应用纹理。我已阅读本教程here但我在“在OpenGL中

c++ - 如何在 Eclipse C++ 中使用 -std-c++11

我在代码中写了这一行vectorcone1{0.0f,2.4f,-11.0f,/*rotated*/30.0f,-1.5f,0.0f,0.0f};但是像在C++98中一样出现错误,变量必须由构造函数而不是{}初始化我已经搜索了我应该使用-std-c++11的解决方案,但是我不知道如何在Eclipse中添加它? 最佳答案 您可以通过几个简单的步骤完成此操作...右键单击项目并选择“属性”导航到C/C++Build->Settings选择工具设置标签。导航到GCCC++编译器->杂项在标记为OtherFlags的选项设置中添加-std=

c++ - QGLWidget - 3-D 空心物体的横截面

我正在使用QGLWidget绘制3-D对象,我程序的输入是形状的面。这意味着当我想画一个立方体时,我得到了6个元素的列表,每个元素代表一个面,每个面包含4个点,每个点(x,y,z)。绘图已完成,但我正在尝试实现横截面特征,到目前为止,横截面后的结果形状是空心物体,如何获得横截面结果,就好像形状不是空心的一样? 最佳答案 OpenGL不知道“对象”。它不知道“实心”或“空心”。OpenGL只知道点、线和三角形。如果您想让您的对象看起来是实体的,您必须计算切掉的对象的几何形状,从而生成一个新的网格,您可以将其用作绘图的输入数据。切割过程

c++ - 过剩库中缺少 glutInitContextVersion()

我正在练习一些opengl代码,但是当我想通过glutInitContextVersion()强制opengl上下文使用特定版本的opengl时,编译过程失败并显示此消息:-useofundeclaredidentifier'glutInitContextVersion'我想解决这个问题,所以我的代码尽可能简单代码#include"File.h"#include#includeusingnamespacestd;intmain(){glutInitContextVersion(3,2);return1;}但是我能够使用其他glut函数而没有任何错误或警告消息我在装有OSX10.9.1的