草庐IT

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的

c++ - 如何在编译时检查函数是否在全局范围内声明

让我有一个标题,例如#include.它包含OpenGLAPI函数的子集。我需要这样的东西:static_assert(has_glDrawArraysIndirect::value,"ThereisnoglDrawArraysIndirect");或者更好:PFNGLDRAWARRAYSINSTANCEDPROCptr_glDrawArraysIndirect=ptr_to_glDrawArraysIndirect::ptr;在哪里ptr_to_glDrawArraysIndirect::ptr展开指向glDrawArraysIndirect的指针(如果已定义)或stub函数stub

c++ - C++ 中的 OpenGl VBO 技术

对于在OpenGL程序中正确使用VBO,我有点困惑。我想创建一个地形分页算法,使用从4096x4096灰度高度图调用的map作为“整体”map。据我所知,存储在VBO中的每个顶点将占用64个字节。我遇到的问题是,大多数来源都指出单个VBO的大小应在1-4mb之间,VBO越少越好。然而根据我的计算,存储每个顶点总共需要大约1GB的数据!(4096x4096x64)这不包括每个顶点可能需要为每个三角形存储多次。一旦我完成了代码的地形部分,这也无法容纳这张map上的不同车辆和人员。我看到的另一个解决方案是在程序运行时从硬盘驱动器中分页数据,但是另一个消息来源说在程序运行时创建和销毁是一个坏主