RTint generateUnitCubeObject() { RTint objId = rtGenObjects(1); rtNewObject(objId, RT_COMPILE); RTuint shaderClass = rtGenNewShaderClass("Shader6", "libShader6.so"); RTuint shaderId = rtGenNewShader(); rtBindShader(shaderId); rtMatrixMode(RT_MODELVIEW); rtLoadIdentity(); rtPushMatrix(); rtTranslatef(-0.5f, -0.5f, -0.5f); rtBegin(RT_POLYGON); { rtColor3f(0, 0, 0); rtVertex3f(0, 0, 0); rtColor3f(0, 1, 0); rtVertex3f(0, 1, 0); rtColor3f(1, 1, 0); rtVertex3f(1, 1, 0); rtColor3f(1, 0, 0); rtVertex3f(1, 0, 0); } rtEnd(); rtBegin(RT_POLYGON); { rtColor3f(1, 0, 1); rtVertex3f(1, 0, 1); rtColor3f(1, 1, 1); rtVertex3f(1, 1, 1); rtColor3f(0, 1, 1); rtVertex3f(0, 1, 1); rtColor3f(0, 0, 1); rtVertex3f(0, 0, 1); } rtEnd(); rtBegin(RT_POLYGON); { rtColor3f(0, 0, 0); rtVertex3f(0, 0, 0); rtColor3f(0, 0, 1); rtVertex3f(0, 0, 1); rtColor3f(1, 0, 1); rtVertex3f(1, 0, 1); rtColor3f(1, 0, 0); rtVertex3f(1, 0, 0); } rtEnd(); rtBegin(RT_POLYGON); { rtColor3f(1, 1, 0); rtVertex3f(1, 1, 0); rtColor3f(1, 1, 1); rtVertex3f(1, 1, 1); rtColor3f(0, 1, 1); rtVertex3f(0, 1, 1); rtColor3f(0, 1, 0); rtVertex3f(0, 1, 0); } rtEnd(); rtBegin(RT_POLYGON); { rtColor3f(0, 1, 0); rtVertex3f(0, 1, 0); rtColor3f(0, 1, 1); rtVertex3f(0, 1, 1); rtColor3f(0, 0, 1); rtVertex3f(0, 0, 1); rtColor3f(0, 0, 0); rtVertex3f(0, 0, 0); } rtEnd(); rtBegin(RT_POLYGON); { rtColor3f(1, 0, 0); rtVertex3f(1, 0, 0); rtColor3f(1, 0, 1); rtVertex3f(1, 0, 1); rtColor3f(1, 1, 1); rtVertex3f(1, 1, 1); rtColor3f(1, 1, 0); rtVertex3f(1, 1, 0); } rtEnd(); rtPopMatrix(); rtEndObject(); return objId; } void instantiateCubeObjects(RTint objId) { rtMatrixMode(RT_MODELVIEW); for (RTint i=-2; i<2; i++) for (RTint j=-2; j<2; j++) for (RTint k=-2; k<2; k++) { rtLoadIdentity(); rtScalef(0.4f, 0.4f, 0.4f); rtTranslatef(i, j, k); rtScalef(0.4f, 0.4f, 0.4f); RTuint instID = rtInstantiateObject(objId); rtSetInstanceVisibility(instID, RT_SHADOW); if (i == 0) rtAddInstanceVisibility(instID, RT_PRIMARY); if (j == 0) rtAddInstanceVisibility(instID, RT_REFLECTION); } }