小编pol*_*lux的帖子

C++/openGL:使用四元数将QUAD旋转到一个点

当我在某个位置有一个QUAD时,我怎么能以这样的方式旋转它以使其法线指向一个给定的点?想象一下,彩色块只是矩形四边形,然后这个图像显示了我的意思.四边形都以这样的方式定向,它们指向球体的中心.

alt text http://emrahgunduz.com/wp-content/uploads/2009/01/material_id_gui-600x364.jpg

也许这第二张图片显示了我正在尝试的更多内容: alt text http://img689.imageshack.us/img689/3130/screenshot20100708at555.png

我正在使用openGL/C++(以及Eigen lib).我有这个代码来绘制一个简单的四边形:

#include "ofMain.h"
#include "Quad.h"
Quad::Quad(Vector3f oPosition):position(oPosition) {
}

void Quad::update() {
}

void Quad::draw() {
    float size = 1.3;
    glColor3f(1.0f, 0.0f, 0.6f);
    glPushMatrix();
        glTranslatef(position.x(), position.y(), position.z());
        glScalef(size, size,size);
        glBegin(GL_QUADS);
            glVertex3f(0,0,0);
            glVertex3f(1,0,0);
            glVertex3f(1,1,0);
            glVertex3f(0,1,0);
        glEnd();
    glPopMatrix();
}
Run Code Online (Sandbox Code Playgroud)

更新17-07 亲爱的读者,

旋转四边形进一步了解一下.我随机定位了几个四边形,然后look_at使用此代码使用以下回复中的描述将它们旋转到vector3f:

void Quad::draw() {
    float size = 0.5;
    glColor3f(1.0f, 0.0f, 0.6f);
    glPushMatrix();
        Vector3f center = look_at - position;
        Vector3f center_norm = center.normalized();
        float r_angle   = acos(center_norm.dot(normal));
        Vector3f axis = normal.normalized().cross(center_norm); …
Run Code Online (Sandbox Code Playgroud)

c++ opengl rotation quaternions

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

如何将openSSL与内存BIO和非阻塞套接字一起使用

我是openSSL的新手,我试图找出在使用非阻塞套接字时创建https连接的最佳/最佳解决方案,以及libevent,libev或libuv等库与内存BIO的组合.

我正在试图弄清楚如何管理openSSL调用/数据和应用程序数据.总之,我对ssl客户端应用程序应该如何工作的理解是这样的:

  • 创建SSL_CTX
  • 创建一个新的套接字连接(例如我正在使用libuv)
  • 创建两个内存BIO:
    • 一个充满了我从服务器收到的数据(readBio)
    • 另一个用于在应用程序代码中读取.(writeBio)
  • 创建SSL*并将状态设置为SSL_connect_state
  • 使用SSL_do_handshake启动握手过程
  • [loop]接收/发送数据

因为我正在使用libuv(但这可能是任何其他异步/非阻塞库),我有一个读取回调,在套接字上收到数据时会调用它.当我有必须写入套接字的数据时,我将这些数据传递 给库的写入函数(在此uv_write()),但在此之间我需要将调用放到SSL中.

因此,在调用SSL_do_handshake(...)之后,SSL会将一些数据存储到writeBIO中,我必须将其读入并传递到套接字中.我正在考虑的一个问题是,我如何知道SSL将数据存储到此BIO中,其次我如何知道何时应该通过套接字发送数据.

在查看了一些代码后,我发现在调用SSL_do_handshake()之后我必须从writeBIO中消耗掉.但接下来的步骤对我来说并不清楚.在结束握手的第一个字节之后,libuv的'event'循环将所有内容都设置为运动; 当新数据到达套接字时,我的' onread()回调被调用.但是我如何处理这些传入的数据呢?(例如,我自己保持SSL状态(< - 某些人建议我不要做的事情)).

虽然我已经看到很多使用阻塞套接字和核心SSL函数来建立连接的例子但我没有找到一个很好的干净/简约示例,它展示了如何将内存BIO用作客户端.

我已经粘贴了一些我用来测试openSSL的代码:https://gist.github.com/3989091

有谁可以描述使用SSL的异步/非阻塞套接字和内存BIO的过程?

谢谢R

sockets ssl client openssl nonblocking

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

快速nbody算法/解决方案(使用opengl/c ++/??)

我正在研究一个(c ++,opengl)项目,我需要有很多影响彼此的粒子,如果我是正确的,这被称为nbody问题.有人知道这样的算法有什么解决方案.

我知道barnes hut算法,也许我可以偷看openCL,虽然我不仅仅想知道你是否可以使用其他解决方案.

我将创建的代码有很多:

for(int i = 0; i < num_particles; ++i) {
  for(int j = i+1, j < num_particles; ++j)
     dist = distance(particles[i],particles[j]);
     if(dist > limit) {....}
  }
}
Run Code Online (Sandbox Code Playgroud)

亲切的问候,Pollux

c++ opengl performance

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

基于位置的动力学示例(MatthiasMüller)

我想知道是否有人有一个基于位置的动力学的代码示例,即弹簧约束?我发现这篇论文描述了有一些伪代码的技术,但是我希望看到一些java/c/c ++/as/...代码

http://www.matthiasmueller.info/publications/hpbd.pdf

c++ animation physics particles

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

使用什么排序方法:快速排序,桶排序,基数,...用于微小数据对?(C++)

我需要优化一些代码来排序a vector<pair<int, float >>需要在float值上排序的位置.该向量的长度介于0和5之间.我一直在谷歌搜索并阅读C++中的排序方法,但无法找到有关排序微小数据集的任何基准.对于系统来说,重要的是尽可能快,因为它用于实时blob跟踪系统.

亲切的问候,Pollux

c++ sorting performance benchmarking

4
推荐指数
2
解决办法
1473
查看次数

如何在给定的持续时间内从0..1..0..1..0等创建脉动值?

我正在研究一些代码,其中我有Time一个成员的对象time.Time.time给我自应用程序以秒开始的时间(浮点值).现在我想创建一个介于0和1之间,然后再次从1到0的脉动值,这将继续执行,直到应用程序停止.

我正在考虑使用sin(),但不知道将什么传递给它作为创建这个脉冲值的参数.

如何创建这个脉动值?

亲切的问候,Pollux

c# c++ math trigonometry pulse

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

在C++中如何获得使用迭代器时的循环次数?

我正在编写一个应用程序,我绘制了几个图像,如下所示:

void TimeSlice::draw(float fX, float fY) {
list<TimeSliceLevel*>::iterator it = levels.begin();
float level_x = x;
float level_y = y;
while(it != levels.end()) {
    (*it)->draw(level_x,level_y);
    level_y += (*it)->height;
    ++it;
}
Run Code Online (Sandbox Code Playgroud)

}

虽然这有点不正确.我需要将TimeSliceLevel*放在X上.当我有一个for(int i = 0; i < slices.size(); ++i)循环时,我可以使用x = i * width.虽然我正在使用迭代器,因为我多次被告知这是一个很好的编程:>我想知道迭代器是否有一个"索引"数字可以用来计算新的X位置?(所以这是一个关于使用迭代器的问题)

亲切的问候,Pollux

c++ counter iterator positioning

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