当我在某个位置有一个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) 我是openSSL的新手,我试图找出在使用非阻塞套接字时创建https连接的最佳/最佳解决方案,以及libevent,libev或libuv等库与内存BIO的组合.
我正在试图弄清楚如何管理openSSL调用/数据和应用程序数据.总之,我对ssl客户端应用程序应该如何工作的理解是这样的:
因为我正在使用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
我正在研究一个(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
我想知道是否有人有一个基于位置的动力学的代码示例,即弹簧约束?我发现这篇论文描述了有一些伪代码的技术,但是我希望看到一些java/c/c ++/as/...代码
我需要优化一些代码来排序a vector<pair<int, float >>需要在float值上排序的位置.该向量的长度介于0和5之间.我一直在谷歌搜索并阅读C++中的排序方法,但无法找到有关排序微小数据集的任何基准.对于系统来说,重要的是尽可能快,因为它用于实时blob跟踪系统.
亲切的问候,Pollux
我正在研究一些代码,其中我有Time一个成员的对象time.Time.time给我自应用程序以秒开始的时间(浮点值).现在我想创建一个介于0和1之间,然后再次从1到0的脉动值,这将继续执行,直到应用程序停止.
我正在考虑使用sin(),但不知道将什么传递给它作为创建这个脉冲值的参数.
如何创建这个脉动值?
亲切的问候,Pollux
我正在编写一个应用程序,我绘制了几个图像,如下所示:
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++ ×6
opengl ×2
performance ×2
animation ×1
benchmarking ×1
c# ×1
client ×1
counter ×1
iterator ×1
math ×1
nonblocking ×1
openssl ×1
particles ×1
physics ×1
positioning ×1
pulse ×1
quaternions ×1
rotation ×1
sockets ×1
sorting ×1
ssl ×1
trigonometry ×1