小编gen*_*ult的帖子

glGenVertexArrays(1,&vao)的分段错误;

我的gdb回溯给出:

(gdb) backtrace
#0  0x00000000 in ?? ()
#1  0x0804a211 in init () at example1.cpp:147
#2  0x0804a6bc in main (argc=1, argv=0xbffff3d4) at example1.cpp:283
Run Code Online (Sandbox Code Playgroud)

信息量不大.Eclipse调试器至少让我看到它停在下面的第3行:

// Create a vertex array object
GLuint vao;
glGenVertexArrays( 1, &vao );
glBindVertexArray( vao );
Run Code Online (Sandbox Code Playgroud)

这是一个非常常见的块,可以在gl编程中看到,我甚至可以使用相同的块运行其他代码,没有任何问题.所以我很困惑.

从运行make构建输出:

g++ -g -DFREEGLUT_STATIC -DGLEW_STATIC -I../../include example1.cpp ../../Commo/InitShader.o  -L/usr/lib/mesa -lGLEW -lglut -lGL -lX11  -lm  -o example1
Run Code Online (Sandbox Code Playgroud)

包含问题的程序:

// rotating cube with two texture objects
// change textures with 1 and 2 keys

#include "Angel.h"

const int  NumTriangles = 12; // …
Run Code Online (Sandbox Code Playgroud)

c++ opengl debugging segmentation-fault

50
推荐指数
1
解决办法
2万
查看次数

理解glm :: lookAt()

我正在学习OpenGL来学习OpenGL,在这个教程中他们使用glm::lookAt()函数来构建视图,但是我无法理解它的工作情况glm::lookAt(),显然,没有详细的GLM文档.谁能帮我理解参数和工作glm::lookAt()吗?

GLM文档说:

detail::tmat4x4<T> glm::gtc::matrix_transform::lookAt   
(   
    detail::tvec3< T > const &  eye,
    detail::tvec3< T > const &  center,
    detail::tvec3< T > const &  up 
)
Run Code Online (Sandbox Code Playgroud)

我目前的理解是相机位于eye并面向center.(我不知道是什么up)

c++ opengl glm-math

50
推荐指数
3
解决办法
8万
查看次数

Visual Studio 2015诊断工具不支持当前的调试配置

使用VS2015快照和分析工具后,我似乎无法让诊断工具再次工作.每个项目,甚至是新项目都只说以下内容

"诊断工具"窗口不支持当前的调试配置.

在此输入图像描述

尝试创建新的和不同类型的项目,以管理员身份运行,删除程序数据,应用程序数据,修复和从卸载重新安装.

有人经历过这个吗?很遗憾,因为他们在这个版本中对这个工具进行了大量改进.

谢谢

c# debugging visual-studio visual-studio-debugging visual-studio-2015

50
推荐指数
3
解决办法
2万
查看次数

如何在Visual Studio 2012中安装GLUT和OpenGL?

我今天刚刚安装了Visual Studio 2012,我想知道如何在平台上安装GLUT和OpenGL?

opengl glut visual-studio-2012

49
推荐指数
5
解决办法
15万
查看次数

矢量:初始化还是保留?

我知道向量的大小,这是初始化它的最佳程序?:

选项1

vector<int> vec(3); //in .h
vec.at(0)=var1;     //in .cpp
vec.at(1)=var2;     //in .cpp
vec.at(2)=var3;     //in .cpp
Run Code Online (Sandbox Code Playgroud)

选项2

vector<int> vec;     //in .h
vec.reserve(3);     //in .cpp
vec.push_back(var1);     //in .cpp
vec.push_back(var2);     //in .cpp
vec.push_back(var3);     //in .cpp
Run Code Online (Sandbox Code Playgroud)

我猜选项2优于1.是吗?其他选择?

c++ vector

48
推荐指数
5
解决办法
3万
查看次数

跟踪C++内存分配

我正在寻找一种方法来跟踪C++程序中的内存分配.我对内存泄漏感兴趣,这似乎是大多数工具试图找到的,而是为应用程序创建内存使用情况配置文件.理想输出可以是函数名称的大列表加上随时间推移的最大分配字节数,也可以是更好的堆积随时间变化的图形表示.横轴是时间,纵轴堆空间.每个函数都会获得它自己的颜色,并根据分配的堆字节绘制线条.用于识别分配的对象类型的加分点.

我们的想法是找到内存瓶颈/可视化哪些函数/线程消耗最多的内存,并且应针对进一步优化.

我简要地看了一下Purify,BoundsChecker和AQTime,但它们似乎并不像我追求的那样.Valgrind看起来很合适,但是,我在Windows上.Memtrack看起来很有前景,但需要对源代码进行重大更改.

我的谷歌技能一定让我失望了,因为它似乎不是这么罕见的要求吗?创建这样的工具所需的所有信息都应该可以从程序的调试符号和运行时API调用中获得 - 不是吗?

c++ visualization memory-management

47
推荐指数
5
解决办法
4万
查看次数

如何计算Tangent和Binormal?

在OpenGL着色语言(GLSL)中讨论凹凸贴图,镜面高光和这些东西

我有:

  • 顶点数组(例如{0.2,0.5,0.1,0.2,0.4,0.5,...})
  • 法线数组(例如{0.0,0.0,1.0,0.0,1.0,0.0,...})
  • 点光源在世界空间中的位置(例如{0.0,1.0,-5.0})
  • 观众在世界空间中的位置(例如{0.0,0.0,0.0})(假设观众位于世界的中心)

现在,我如何计算每个顶点的Binormal和Tangent?我的意思是,计算Binormals的公式是什么,我必须根据这些信息使用什么?和切线相关?

无论如何我都会构建TBN矩阵,所以如果你知道根据这些信息直接构造矩阵的公式会很好!

哦,是的,如果需要,我也有纹理坐标.正如我所说的GLSL,我认为,每个顶点解决方案都是不错的,它不需要一次访问多个顶点信息.

----更新-----

我找到了这个解决方案

vec3 tangent;
vec3 binormal;

vec3 c1 = cross(a_normal, vec3(0.0, 0.0, 1.0));
vec3 c2 = cross(a_normal, vec3(0.0, 1.0, 0.0));

if (length(c1)>length(c2))
{
    tangent = c1;
}
else
{
    tangent = c2;
}

tangent = normalize(tangent);

binormal = cross(v_nglNormal, tangent);
binormal = normalize(binormal);

但我不知道它是否100%正确.

opengl math 3d glsl

43
推荐指数
3
解决办法
4万
查看次数

计算三角形网格中的法线

我画了一个有10000个顶点(100x100)的三角形网格,它将是一个草地.我使用了gldrawelements().我看了一整天,仍然无法理解如何计算这个法线.每个顶点是否有自己的法线或每个三角形都有自己的法线?有人能指出我正确的方向如何编辑我的代码以合并法线?

struct vertices {
    GLfloat x;
    GLfloat y;
    GLfloat z;
}vertices[10000];

GLuint indices[60000];

/*
99..9999
98..9998
........
01..9901
00..9900
*/

void CreateEnvironment() {
    int count=0;
    for (float x=0;x<10.0;x+=.1) {
        for (float z=0;z<10.0;z+=.1) {
            vertices[count].x=x;
            vertices[count].y=0;
            vertices[count].z=z;
            count++;
        }
    }
    count=0;
    for (GLuint a=0;a<99;a++){
        for (GLuint b=0;b<99;b++){
            GLuint v1=(a*100)+b;indices[count]=v1;count++;
            GLuint v2=(a*100)+b+1;indices[count]=v2;count++;
            GLuint v3=(a*100)+b+100;indices[count]=v3;count++;
        }
    }
    count=30000;
    for (GLuint a=0;a<99;a++){
        for (GLuint b=0;b<99;b++){
            indices[count]=(a*100)+b+100;count++;//9998
            indices[count]=(a*100)+b+1;count++;//9899
            indices[count]=(a*100)+b+101;count++;//9999
        }
    }
}

void ShowEnvironment(){
    //ground
    glPushMatrix();
    GLfloat GroundAmbient[]={0.0,0.5,0.0,1.0};
    glMaterialfv(GL_FRONT,GL_AMBIENT,GroundAmbient);
    glEnableClientState(GL_VERTEX_ARRAY);
    glIndexPointer( GL_UNSIGNED_BYTE, 0, indices ); …
Run Code Online (Sandbox Code Playgroud)

c++ opengl normals computational-geometry

43
推荐指数
4
解决办法
5万
查看次数

用于GLSL编辑的工具

我正在寻找一种与GLSL一起使用的工具.我想在WebGL应用程序中试验着色器,所以我正在寻找的东西就像RenderMonkey.据我所知 - RenderMonkey不再受支持,因此必须有一些其他工具才能占据它的位置.

如果我能像RM一样完成"效果组合"和原始GLSL代码开发,那将是最好的.

ide opengl-es glsl webgl

42
推荐指数
6
解决办法
3万
查看次数

freeglut与glew的区别?

我最近开始学习OpenGL(> 3.3)并且我注意到很多示例和教程都使用了freeglut和glew,但是并没有真正解释它们的区别.我在谷歌搜索和阅读广告后发现的最好的描述是这个OpenGL相关的工具包和API,但发现它缺乏.我甚至在SO上读过标签信息.

作为OpenGL的新手,我仍然试图掌握不同的概念.我已经到了创建基本程序的阶段,该程序使用glew,创建上下文(在Windows上,VS2010),并绘制真正基本的形状,所有这些都不需要明确包含freeglut.所以我不明白为什么我需要它.

所以我的问题是,有什么区别:
-freeglut
-glew
- (&glfw) 另一个人不能
做什么呢?

opengl glew freeglut glfw

41
推荐指数
1
解决办法
3万
查看次数