草庐IT

时间:2018-03-08 标签:c++opengl: how can i combine 2 different projection types for 3d graphics and 2d menus?

我想对菜单使用倾斜投影,对3d场景使用透视投影。有没有办法结合这两个预测?一般来说,我问的是如何在opengl中为我的3d场景创建菜单。使用c++语言编程。谢谢! 最佳答案 没问题。只需使用适当的方法绘制3D场景加载模型View和投影矩阵。然后加载向上二维矩阵,关闭深度测试,然后渲染你的菜单。下面是它的外观示例。glEnable(GL_DEPTH_TEST)glMatrixMode(GL_MODELVIEW);--codetoloadmyPerspectiveModelviewMatrixglMatrixMode(GL_PROJEC

c++ - 如何有效地绘制数千个顶点?

我目前正在编写一个显示粒子系统演化的交互式模拟器。我正在使用VisualStudio在Windows732位上进行开发。目前,我有一个函数可以在屏幕上绘制所有粒子,看起来像这样:voidSimulator::draw(){glColor4f(255,255,255,0);glBegin();for(size_ti=0;i这对测试来说效果很好,但速度慢得离谱。如果我在屏幕上有200个粒子,不做任何其他计算(只是重复调用draw()),我得到大约60fps。但如果我使用1000个粒子,它的运行速度仅为15-20fps。我的问题是:如何更快地绘制粒子?我的模拟以相当不错的速度运行,并且在某个

c++ - glPolygonMode(GL_FRONT_AND_BACK, GL_LINES) 不工作

我正在尝试以正常填充模式渲染图元,然后将其渲染为线框。渲染代码:glClear(GL_COLOR_BUFFER_BIT);glClearColor(0.9f,0.9f,0.9f,1);//resetmatrixglLoadIdentity();//filldisplaylistglColor3c(150,255,255);glCallList(lDList);//wireframedisplaylistglColor3f(0,0,0);glLineWidth(10);glPolygonMode(GL_FRONT_AND_BACK,GL_LINES);glCallList(lDList)

c++ - 计算顶点法线

我在谷歌上搜索了很多小时都没有得到很好解释的答案,我正在处理光照,我需要顶点法线,假设我们有这个顶点缓冲区(它是一个立方体):staticconstGLfloatg_vertex_buffer_data[]={-1.0f,-1.0f,-1.0f,-1.0f,-1.0f,1.0f,-1.0f,1.0f,1.0f,1.0f,1.0f,-1.0f,-1.0f,-1.0f,-1.0f,-1.0f,1.0f,-1.0f,1.0f,-1.0f,1.0f,-1.0f,-1.0f,-1.0f,1.0f,-1.0f,-1.0f,1.0f,1.0f,-1.0f,1.0f,-1.0f,-1.0f,-1.0f

c++ - OpenGL 3.3/GLSL 和 C++ 错误 : "must write to gl_Position"

我目前正在尝试使用OpenGL3.3和C++以及GLM、GLFW3和GLEW库来渲染一个三角形,但在尝试创建我的着色器程序时出现错误。Vertexinfo(0):errorC5145:mustwritetogl_Position我已经尝试找出发生这种情况的原因并在其他论坛上询问过,但没有人知道原因是什么。这个错误可能起源于三个可能的点-在我的main.cpp中,我在其中创建窗口、上下文、程序、vao等......#include#include#include#include#include#include"util/shaderutil.hpp"#defineWIDTH800#def

c++ - 无法在 OpenGL C++ 中渲染三角形

我试着关注thisC中的OpenGL教程,但是当谈到第二个教程时,应该在窗口上绘制三角形的教程,我什么也看不到。所以这就是我所做的,我采用了创建OpenGL上下文、窗口和其他东西的代码,并试图使其更简单:我尝试使用glBegin/glEnd而不是使用VAO。我收到此错误:1282“无效操作”。我只是使用直接来self的LWJGL项目的相同句子。主循环非常简单,我不明白它为什么不起作用,而且1282错误没有给我任何信息。为什么我仍然收到错误消息?#include#include#pragmacomment(lib,"glfw3.lib")#pragmacomment(lib,"glew3

c++ - glDebugMessageCallback 更详细的信息

我到处都读到glDebugMessageCallback是解决错误的更好解决方案,所以我实现了它。到目前为止,一切都很好。我确实得到了关于正在发生的事情的更详细信息。目前在NVIDIA上看起来是f.e.像这样:DebugLog:InsourceAPI,typeOTHER,id131185,severity:NONE,messageBufferdetailedinfo:Bufferobject3(boundtoGL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB(0),andGL_ARRAY_BUFFER_ARB,usagehintisGL_STREAM_D

c++ - 为什么我没有 WGL_ARB_create_context 扩展?

我正在执行以下代码来创建核心配置文件OpenGL上下文。具体来说,我是:创建一个虚拟窗口使用这个虚拟窗口请求OpenGL上下文(我假设它会被硬件加速,但我不确定这是否重要)使用这个OpenGL上下文加载OpenGL函数指针使用这些函数指针,然后我尝试使用wglCreateContextAttribsARB在第二个窗口中创建第二个上下文,特别是使用核心配置文件。代码:WNDCLASSWwcDummy={0};wcDummy.lpfnWndProc=+[](HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam){returnDefWindowProc

c++ - QGLWidget 在 Windows 7 中显示为黑色

我使用VisualStudio2010在WindowsXP(Qt4.7.2)中编写并测试了一些代码,然后我在另一台安装了Windows7的机器上进行了尝试。该程序打开一个QDialog并创建一个QGLWidget,我在其中显示网络摄像头图像(经过一些处理)。虽然在WindowsXP中图像显示正确,但当我在Windows7机器上测试程序时,QGLWidget变黑并且没有图像显示。但是,奇怪的是,当我在窗口周围移动并且它离开屏幕边界时,图像会立即显示并在我再次停止移动时变成黑色,这让我认为图像已正确接收/processed(有时),这可能是QTimer的问题。相关代码为:初始化:voidG

c++ - OpenGL概念题

我刚刚开始在Win32C++中进行OpenGL编程,所以不要对我太苛刻:)我现在一直在NeHe教程和“红皮书”中徘徊,但我很困惑。到目前为止,我已经能够设置一个OpenGL窗口,绘制一些三角形等,没问题。但是现在我想建立一个模型并从不同的角度查看它。我们也是:将模型加载到内存中(将三角形/四边形坐标保存在堆上的结构中),在每个场景渲染中,我们使用glVertex3f等将所有内容绘制到屏幕上。使用glVertex3f等加载/绘制一次模型,我们只需更改每个场景中的查看位置即可。其他...?在我看来,选项1是我目前阅读的所有内容中最合理的,但它似乎有点……嗯……愚蠢!我们是否必须决定哪些对象