小编Ora*_*eet的帖子

更新网格内的几何图形不会做任何事情

我正在使用THREE.JS rev 49.

我的程序需要通过更改它的几何来更新网格.不幸的是,显示器似乎没有更新.

这是我的代码:

// theObject is an array of associatives :

// {
//     object1: {mesh: undefined/THREE.mesh, mat: THREE.Material, geo: THREE.Geometry}
//     object2: {mesh: undefined/THREE.mesh, mat: THREE.Material, geo: THREE.Geometry}
//     ...
// }

// In my function, theObject[i].mesh geometry must change to be theObject[i].geo.


for(i in theObjects) {

    //*
    if ( theObjects[i].mesh == undefined) {
        theObjects[i].mesh = new THREE.Mesh(theObjects[i].geo, theObjects[i].mat);

        theObjects[i].mesh.geometry.dynamic = true;
        theObjects[i].geo.verticesNeedUpdate = true;

        scenePostsurgery.add(theObjects[i].mesh);
    }  else
        theObjects[i].mesh.geometry.vertices = theObjects[i].geo.vertices;

}
Run Code Online (Sandbox Code Playgroud)

我还需要添加其他东西吗?

/ Oragon

three.js

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

正确使用QOpenGLFunctions

我目前正在使用Qt5 gui模块来访问OpenGL函数.然后我发现QOpenGLFunctions哪个是有用的,因为:

  • 它包含OpenGL for Desktop和OpenGL ES,确保我以"便携"的方式使用OpenGL API.
  • 我不必担心包含OpenGL标题,Qt为我做了.

然而,我怀疑使用它的正确方法.以下行仅列出了我使用此类的三种方式.我的问题是:有一个好的使用方法QOpenGLFunctions吗?

继承自 QOpenGLFunctions

Qt官方文档说'继承你的课程QOpenGLFunctions并像以前一样使用glXXXX课程.但我不喜欢这样:

  • 如果我的类之前需要继承其他类,我必须进行多重继承.我不喜欢的东西.即使这样的情况无论如何都是安全的,这是aestethics ......
  • 每个glXXXX包装类都是非const的.我会强制所有使用OpenGL的方法都是非const的.这并没有太大的意义.是的,OpenGLFunctions当我这样做时glClear(...),类可以合法地为非const ,但为什么我的方法DrawableShape::render(...)会是?

而关于继承QOpenGLFunctions.它的构造函数可以接受一个参数:当前的OpenGL上下文.这个参数对我来说似乎非常重要,但没有Qt文档调用这个构造函数.相反,他们让编译器选择无参数构造函数.

QOpenGLFunctions会员

另一个想法应该是让一个实例QOpenGLFunctions成为调用glXXXXX函数的任何类的成员,或至少引用一个实例,并从该实例调用每个OpenGL函数.

QOpenGLFunctions作为参数传递

对于使用OpenGL的每个函数,调用者发送QOpenGLFunctions.这条路 :

void renderRectangle(QOpenGLFunctions& opengl) const;
Run Code Online (Sandbox Code Playgroud)

但我怎么能确定这个功能需要它而且这个功能不会呢?我的意思是源代码会变得越来越大,我担心看到接收这个参数的类的每个方法的风险......

c++ opengl qt5

10
推荐指数
1
解决办法
3767
查看次数

为什么boost :: locale抛出std :: bad_cast?

我试着理解如何使用boost :: locale来比较忽略大小写和变体的字符串.我直接尝试了Boost文档中的代码:

http://www.boost.org/doc/libs/1_51_0/libs/locale/doc/html/collat​​ion.html

boost::locale::generator gen;
std::locale vLocale = gen("");


std::wstring a=L"Façade", b=L"facade";

// Following will throw bad_cast
bool eq = std::use_facet<boost::locale::collator<wchar_t>>(vLocale).compare(
    boost::locale::collator_base::secondary,
    a,
    b
) == 0;

if(eq) std::cout << "OK" << std::endl;
Run Code Online (Sandbox Code Playgroud)

此代码在运行时将抛出std :: bad_cast异常.我在boost :: locale :: generator的构造函数中尝试了很多参数.有谁知道我遇到的问题?

我正在使用带有g ++ 4.6和Boost 1.51.0的C++ 11

c++ boost locale exception

6
推荐指数
1
解决办法
1717
查看次数

如何捕捉 X 错误?

我尝试在网上搜索,但我必须注意,要找到有关 X 编程这方面的资料并不容易。

我使用 X 和 GLX 来创建 OpenGL 上下文。我已经知道我当前的显卡驱动程序最多只支持 OpenGL API 3.3 版,但我希望我的应用程序能够尝试使用任何类型的版本创建上下文(因为它可以在其他计算机上运行)。我的代码是这样的:

  • 版本<- 请求的 OpenGL 版本(例如:3.3)
  • 创建上下文:
    • 如果版本是 3.x 或 4.x,请使用glXCreateContextAttribsARB
    • 否则使用 glXCreateContext
  • 如果创建上下文失败,则降一个版本(3.3 变为 3.2,或 3.0 变为 2.1,...)
  • 如果创建了上下文或者甚至无法使用最低 OpenGL 版本,则停止。

我的代码没问题,但我想在检索 X/GLX 启动的错误的方式上更干净,至于目前,如果我glXCreateContextAttribARB用来创建 4.4 版本(请记住,我的显卡最多只支持3.3),我显然得到:

X Error of failed request:  BadMatch (invalid parameter attributes)
  Major opcode of failed request:  153 (GLX)
  Minor opcode of failed request:  34 ()
  Serial number of failed request:  33
  Current serial number in output stream: …
Run Code Online (Sandbox Code Playgroud)

c unix xlib glx

5
推荐指数
1
解决办法
1964
查看次数

标签 统计

c++ ×2

boost ×1

c ×1

exception ×1

glx ×1

locale ×1

opengl ×1

qt5 ×1

three.js ×1

unix ×1

xlib ×1