在我的简单OpenGL程序中,我得到以下关于退出重定义的错误:
1>c:\program files\microsoft visual studio 8\vc\include\stdlib.h(406) : error C2381: 'exit' : redefinition; __declspec(noreturn) differs
1> c:\program files\microsoft visual studio 8\vc\platformsdk\include\gl\glut.h(146) : see declaration of 'exit'
Run Code Online (Sandbox Code Playgroud)
我正在使用Nate Robins的GLUT for Win32,并在Visual Studio 2005或Visual C++ 2005(Express Edition)中出现此错误.导致此错误的原因是什么?如何解决?
我有一个使用directx和openGL的渲染器,以及一个3d场景.视口和窗口具有相同的尺寸.
如何以独立于平台的方式实现给定鼠标坐标x和y的拾取?
我想在Linux中打开没有X的OpenGL上下文.有没有办法做到这一点?
我知道集成英特尔显卡硬件是不可能的,尽管大多数人在他们的系统中都有nvidia卡.我想得到一个适用于nvidia卡的解决方案.
如果除了通过集成的英特尔硬件之外别无他法,我想可以知道它是如何完成的.
X11协议和协议本身太大而复杂.它提供的鼠标/键盘/平板电脑输入多路复用功能对于现代程序来说过于臃肿.我认为这是阻止Linux桌面改进的最糟糕的障碍,这就是我寻找替代方案的原因.
偶尔我会到达我想要获得OpenGL帧缓冲对象的地方,但是我对打开任何类型的窗口都不感兴趣.
是否可以创建一个opengl上下文而不将其附加到任何类型的窗口?
我试图在GLSL中围绕着色器,我已经找到了一些有用的资源和教程,但是我一直在为一些应该是根本和微不足道的东西碰壁:我的片段着色器如何检索颜色目前的片段?
你可以通过说明来设置最终颜色gl_FragColor = whatever,但显然这是一个仅输出值.如何获得输入的原始颜色,以便对其进行计算?这必须在某个地方变量,但如果有人知道它的名字,他们似乎没有在我到目前为止遇到的任何教程或文档中记录它,它正在推动我的问题.
我有3轴的加速度计值(通常只有重力包含介于-1.0和1.0之间的数据):
float Rx;
float Ry;
float Rz;
Run Code Online (Sandbox Code Playgroud)
我做了躯体计算,然后我得到每个轴的角度.
float R = sqrt(pow(Rx,2)+pow(Ry,2)+pow(Rz,2));
float Arx = acos(Rx/R)*180/M_PI;
float Ary = acos(Ry/R)*180/M_PI;
float Arz = acos(Rz/R)*180/M_PI;
Run Code Online (Sandbox Code Playgroud)
然后我在opengl中设置框角度的值
rquad = Arx;
yquad = Ary;
Run Code Online (Sandbox Code Playgroud)
哪个旋转我的盒子:
glRotatef(yquad,1.0f,0.0f,0.0f);
glRotatef(rquad,0.0f,1.0f,0.0f);
Run Code Online (Sandbox Code Playgroud)
它适用于半球.我想使用完整的球体,我知道我必须使用Arz值使其工作,但我不知道如何使用它进行此旋转.你可以帮帮我吗?
更新:最终答案在我的情况下:
rquad = -atan2(Rx/R, Rz/R)*180/M_PI;
yquad = -atan2(Ry/R, Rz/R)*180/M_PI;
Run Code Online (Sandbox Code Playgroud) 我不确定如何描述我追求的东西,所以我画了一张图片来帮助:

我的问题是,在OpenGL中是否有可能在单个多边形上创建那些像素看起来凹凸的错觉,而不必诉诸于使用多个多边形?如果是的话,方法是什么?
我正在研究2d引擎.它已经工作得很好,但我不断得到像素错误.
例如,我的窗口是960x540像素,我从(0,0)到(959,0)画一条线.我希望扫描线0上的每个像素都会被设置为一种颜色,但是没有:最右边的像素没有被绘制.当我垂直绘制到像素539时,同样的问题.我真的需要绘制到(960,0)或(0,540)来绘制它.
由于我出生在像素时代,我确信这不是正确的结果.当我的屏幕大于320x200像素时,我可以从0到319以及从0到199进行绘制,我的屏幕将会满.现在我最终得到一个没有绘制右/底像素的屏幕.
这可能是由于不同的原因:我期望将opengl线基元从像素绘制到包含像素,最后一个像素实际上是独占的?是吗?我的投影矩阵不正确?我有一个错误的假设,当我有一个960x540的后备缓冲区时,实际上有一个像素更多?别的什么?
有人可以帮帮我吗?我一直在研究这个问题很长一段时间,每当我认为它没问题的时候,我看了一会儿它实际上没有.
这是我的一些代码,我试图尽可能地删除它.当我调用我的线函数时,每个坐标都加上0.375,0.375,以使它在ATI和nvidia适配器上都正确.
int width = resX();
int height = resY();
for (int i = 0; i < height; i += 2)
rm->line(0, i, width - 1, i, vec4f(1, 0, 0, 1));
for (int i = 1; i < height; i += 2)
rm->line(0, i, width - 1, i, vec4f(0, 1, 0, 1));
// when I do this, one pixel to the right remains undrawn
void rendermachine::line(int x1, int y1, int x2, int y2, const vec4f &color) …Run Code Online (Sandbox Code Playgroud) 我正在尝试整合一个非常基本的OpenGL 3.2(核心配置文件)应用程序.在下面的代码中,应该创建一个包含三角形顶点位置的VBO,调用glVertexAttribPointer失败并引发OpenGL错误GL_INVALID_OPERATION.这是什么意思,我该如何解决它?
GLuint vbo, attribLocation = glGetAttribLocation(...);
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
GLfloat vertices[] = { 0, 1, 0, 1, 0, 0, -1, 0, 0 };
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glEnableVertexAttribArray(attribLocation);
// At this point, glGetError() returns GL_NO_ERROR.
glVertexAttribPointer(attribLocation, 3, GL_FLOAT, GL_FALSE, 0, 0);
// At this point, glGetError() returns GL_INVALID_OPERATION.
Run Code Online (Sandbox Code Playgroud) 我无法使用我正在使用的其他库来正确链接到我的项目中.
我正在使用CLion,它使用cmake来构建它的项目.我试图将几个库与OpenGL结合使用来构建一些对象.我最初在Visual Studio中构建它,因为我无法弄清楚如何让cmake与Clion一起工作.但是,现在代码全部工作(无论如何都在Visual Studio中),我希望能够使用CLion,因为这是我首选的IDE.
我还是cmake的新手,我不明白我的错误CMakeLists.txt.这是我有的:
cmake_minimum_required(VERSION 3.3)
project(texture_mapping)
find_package(OpenGL REQUIRED)
link_directories(${OPENGL_gl_LIBRARY})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp camera.h display.h display.cpp mesh.cpp mesh.h obj_loader.cpp obj_loader.h shader.cpp shader.h stb_image.c stb_image.h texture.cpp texture.h transform.h)
link_directories(texture_mapping ${PROJECT_SOURCE_DIR}/lib)
add_executable(texture_mapping ${SOURCE_FILES})
target_include_directories(texture_mapping PUBLIC ${PROJECT_SOURCE_DIR}/include)
target_link_libraries(texture_mapping SDL2 SDL2main SDL2test glew32 glew32s ${OPENGL_gl_LIBRARY})
Run Code Online (Sandbox Code Playgroud)
我调整它直到它没有在CLion中给我任何更多的错误,但我的代码仍然无法识别头文件.
所以,我放了我需要的所有库,但它似乎没有在代码中识别它们.Clion在项目中识别它们(它们没有出现错误的红色),但是当它构建时(当我尝试在CLion中运行它时),我得到这些错误:
CMakeFiles\texture_mapping.dir/objects.a(mesh.cpp.obj): In function `ZN4MeshD2Ev':
...texture-mapping/mesh.cpp:30: undefined reference to `_imp____glewDeleteVertexArrays'
CMakeFiles\texture_mapping.dir/objects.a(mesh.cpp.obj): In function `ZN4Mesh8InitMeshERK12IndexedModel':
...texture-mapping/mesh.cpp:36: undefined reference to `_imp____glewGenVertexArrays'
...texture-mapping/mesh.cpp:37: undefined reference to `_imp____glewBindVertexArray'
...texture-mapping/mesh.cpp:39: undefined reference to `_imp____glewGenBuffers'
...texture-mapping/mesh.cpp:40: undefined reference …Run Code Online (Sandbox Code Playgroud)