int main(int argc, char **argv) { SDL_Surface *screen; SDL_Event event; struct vec4 cubeCenter, cube[8]; scalar rota; struct mat4 rot; int i; SDL_Init( SDL_INIT_EVERYTHING ); screen = SDL_SetVideoMode(width, height, 32, 0); proj = proj_perspective(45, (scalar) width / (scalar) height, 1, 10); cubeCenter = vec4_zero(); while(1) { rota = (scalar) SDL_GetTicks() / 1000.0; cubeCenter.z = 5 + sin(rota); rot = mat4_aangle(_vec4(0, 1, 0, 1), rota); cube[0] = vec4_add(mat4_mulv(rot, _vec4( 1, -1, 1, 0)), cubeCenter); cube[1] = vec4_add(mat4_mulv(rot, _vec4(-1, -1, 1, 0)), cubeCenter); cube[2] = vec4_add(mat4_mulv(rot, _vec4(-1, 1, 1, 0)), cubeCenter); cube[3] = vec4_add(mat4_mulv(rot, _vec4( 1, 1, 1, 0)), cubeCenter); cube[4] = vec4_add(mat4_mulv(rot, _vec4( 1, -1, -1, 0)), cubeCenter); cube[5] = vec4_add(mat4_mulv(rot, _vec4(-1, -1, -1, 0)), cubeCenter); cube[6] = vec4_add(mat4_mulv(rot, _vec4(-1, 1, -1, 0)), cubeCenter); cube[7] = vec4_add(mat4_mulv(rot, _vec4( 1, 1, -1, 0)), cubeCenter); SDL_FillRect(screen, 0, 0); drawLine3d(screen, cube[0], cube[1]); drawLine3d(screen, cube[0], cube[3]); drawLine3d(screen, cube[1], cube[2]); drawLine3d(screen, cube[2], cube[3]); drawLine3d(screen, cube[4], cube[5]); drawLine3d(screen, cube[4], cube[7]); drawLine3d(screen, cube[5], cube[6]); drawLine3d(screen, cube[6], cube[7]); drawLine3d(screen, cube[0], cube[4]); drawLine3d(screen, cube[1], cube[5]); drawLine3d(screen, cube[2], cube[6]); drawLine3d(screen, cube[3], cube[7]); SDL_Flip(screen); while(SDL_PollEvent(&event) != 0) { switch(event.type) { case (SDL_QUIT): SDL_Quit(); return 0; default: break; } } } SDL_Quit(); return 0; }
void CrystalEditorFrame::OnPaint(wxPaintEvent& event) { wxPaintDC dc(mainPanel); dc.SetBackground(*wxBLACK_BRUSH); dc.Clear(); int width, height; GetClientSize(&width, &height); Matrix combinedMatrix = create3DTransformationMatrix ( target + backward * distance, target, upward, 0, 0, width, height ); // Render coorinate axes Vector3 origin(0,0,0); Vector3 right(0.3,0,0); Vector3 up(0,0.3,0); Vector3 backward(0,0,0.3); dc.SetPen(redPen); drawLine3d(dc, combinedMatrix, origin, right); dc.SetPen(greenPen); drawLine3d(dc, combinedMatrix, origin, up); dc.SetPen(bluePen); drawLine3d(dc, combinedMatrix, origin, backward); // Render ray paths for (int i = 0; i < COLOR_COUNT; i++) { Ray ¤tPaths = rayPaths[i]; wxColor pc = currentPaths.pen.GetColour(); for (size_t j = 0; j < currentPaths.rayPaths.size(); j++) { vector<pair<Vector3, double> > ¤tPath = currentPaths.rayPaths[j]; for (size_t k = 0; k < currentPath.size() - 1; k++) { double p = currentPath[k].second; if (p < minimumIntensity) p = minimumIntensity; wxPen tmpPen( wxColour( clampIn(p * pc.Red(), 0, 255), clampIn(p * pc.Green(), 0, 255), clampIn(p * pc.Blue(), 0, 255) ) ); dc.SetPen(tmpPen); drawLine3d(dc, combinedMatrix, currentPath[k].first, currentPath[k + 1].first); } } } // Render the mesh wireframe dc.SetPen(*wxWHITE_PEN); renderMeshOnDC( dc, crystalMesh, combinedMatrix, RM_WIREFRAME ); }