Ray-tracing Refraction – Floating Point Error

To implement refraction in ray-tracing rendering, we can simply use the refraction equation: sin(theta1)/sin(theta2) = n2/n1   To compute sin(theta1), simply: cos(theta1)= v1.dot(N); sin(theta1) = sqrt(1-cos(theta1) * cos(theta1));  where v1 is the incomming ray direction, and N is the surface normal. However, there may be trouble when this implementation runs …

Continue reading

Be careful when dealing with C++ floating point.

Look at this piece of code: Vector3 colPlaneNor; float dx = abs(aabb1->getPosition().x() – aabb2->getPosition().x()); float dy = abs(aabb1->getPosition().y() – aabb2->getPosition().y()); if(dx < (aabb1->_width + obb2->_width)/2.0f)     colPlaneNor = Vector3::UNIT_Y; else if(dy < (aabb1->_height + aabb2->_height)/2.0f)     colPlaneNor = Vector3::UNIT_X; The idea of these lines of code is to determine the collision plane normal when two …

Continue reading

RTS Game pitch

Finally we formed another team and decided to build an RTS game.When we talk about RTS game, it is easily to raise up many typical RTS, such as Warcraft, Starcraft, Age of Empire, Command and Conque, etc. RTS games have many similar feature, and how to make our game unique …

Continue reading