namespace Bread { sVector3 sVector3::ZERO = sVector3(0.0f, 0.0f, 0.0f); sVector3 sVector3::X_BASIS = sVector3(1.0f, 0.0f, 0.0f); sVector3 sVector3::Y_BASIS = sVector3(0.0f, 1.0f, 0.0f); sVector3 sVector3::Z_BASIS = sVector3(0.0f, 0.0f, 1.0f); }
void GetMouseRay(sVector3 &pos1, sVector3 &pos2, sVector3 &dir) { int myX, myY; glfwGetMousePos(&myX,&myY); gCamera.Render(); double mvmatrix[16]; double projmatrix[16]; int viewport[4]; double dx,dy,dz; glGetIntegerv(GL_VIEWPORT, viewport); glGetDoublev(GL_MODELVIEW_MATRIX,mvmatrix); glGetDoublev(GL_PROJECTION_MATRIX, projmatrix); double mouseY = viewport[3] - myY; gluUnProject((double)myX, (double)mouseY, 0.0, mvmatrix, projmatrix, viewport, &dx, &dy, &dz); pos1 = sVector3((float)dx,(float)dy,(float)dz); gluUnProject((double)myX, (double)mouseY, 1.0, mvmatrix, projmatrix, viewport, &dx, &dy, &dz); pos2 = sVector3((float)dx,(float)dy,(float)dz); float x,y,z, mag; x = pos2.x - pos1.x; y = pos2.y - pos1.y; z = pos2.z - pos1.z; mag = sqrt(x*x + y*y + z * z); x/= mag; y/= mag; z/= mag; dir = sVector3(x,y,z); }
void cBatchRenderManager::push(sSphere const* sphere, DWORD color) { // int vertNum = 50; float unitAngle = cMath::TWOPI/(float)vertNum; // sVector3 pos(1.0f, 0.0f, 0.0f); sVector3 out, startV, endV; addMulVec3(sphere->m_center, pos, sphere->m_radius, startV); // sQuaternion quat; float angle = 0.0f; for (int i = 0; i <= vertNum; ++i, angle += unitAngle) { rotQuat(pos, sVector3(0.0f, 1.0f, 0.0f), angle, out); addMulVec3(sphere->m_center, out, sphere->m_radius, endV); push(&startV, &endV, color); startV = endV; } }