// Callback function for Scaling void CCS580HWView::OnScale() { // TODO: Add your command handler code here CScaleDlg dlg; GzInput* input; GzMatrix scaleMat = { 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 }; if(m_pApplication == NULL) return; input = m_pApplication->m_pUserInput; if(input == NULL) return; // Initialize input->scale[0] = input->scale[1] = input->scale[2] = 1; dlg.Initialize(input->scale[0], input->scale[1], input->scale[2]); if(dlg.DoModal() == IDOK) { // Update input scale value input->scale[0] = dlg.m_fSx; input->scale[1] = dlg.m_fSy; input->scale[2] = dlg.m_fSz; // Create Scaling Matrix GzScaleMat(input->scale, scaleMat); // Accumulate matrix GzPushMatrix(m_pApplication->m_pRender, scaleMat); } }
static int render_teapot_refraction(GzRender* in_renderer) { //setup shader and teapot material in_renderer->v_shader = GouraudVertexShader; in_renderer->p_shader = GouraudAlphaPixelShader; //use the same material for ambient, diffuse and specular GzColor material_color = {0.7f, 0.3f, 0.1f}; for(int i=0; i<3; i++) { in_renderer->Ka[i] = material_color[i]; in_renderer->Kd[i] = material_color[i]; in_renderer->Ks[i] = material_color[i]; } in_renderer->spec = 32; //setup transform GzMatrix m; GzScaleMat(teapot_scale, m); GzPushMatrix(in_renderer, m); GzCoord pos = {teapot_position[0], teapot_position[1]/1.33f, teapot_position[2]}; GzTrxMat(pos, m); GzPushMatrix(in_renderer, m); GzTrxMat(teapot_rotation, m); GzPushMatrix(in_renderer, m); GzPutCamera(renderer, &default_camera); GzBeginRender(in_renderer); GzToken nameListTriangle[4]; /* vertex attribute names */ GzPointer valueListTriangle[4]; /* vertex attribute pointers */ nameListTriangle[0] = GZ_POSITION; nameListTriangle[1] = GZ_NORMAL; nameListTriangle[2] = GZ_TEXTURE_INDEX; nameListTriangle[3] = GZ_RGB_COLOR; const Model::TriangleVector& triangles = teapot_model.GetData(); for(Model::TriangleVector::const_iterator it = triangles.begin(); it != triangles.end(); it++) { valueListTriangle[0] = (GzPointer)(*it)->vertices; valueListTriangle[1] = (GzPointer)(*it)->normals; valueListTriangle[2] = (GzPointer)(*it)->uvs; GzPutTriangle(in_renderer, 3, nameListTriangle, valueListTriangle); } return GZ_SUCCESS; }
static int render_water_plane(GzRender* in_renderer) { //setup shader and teapot material in_renderer->v_shader = PhongVertexShader; in_renderer->p_shader = PhongPixelShader; //use the same material for ambient, diffuse and specular GzColor material_color = {0.04f, 0.4f, 0.6f}; for(int i=0; i<3; i++) { in_renderer->Ka[i] = material_color[i]; in_renderer->Kd[i] = material_color[i]; in_renderer->Ks[i] = material_color[i]; } in_renderer->spec = 32; GzPutCamera(renderer, &default_camera); //setup transform GzCoord scale = {3.0f, 1.0f, 1.5f}; GzMatrix m; GzScaleMat(scale,m); GzPushMatrix(in_renderer, m); GzBeginRender(in_renderer); GzToken nameListTriangle[4]; /* vertex attribute names */ GzPointer valueListTriangle[4]; /* vertex attribute pointers */ nameListTriangle[0] = GZ_POSITION; nameListTriangle[1] = GZ_NORMAL; nameListTriangle[2] = GZ_TEXTURE_INDEX; nameListTriangle[3] = GZ_RGB_COLOR; const Model::TriangleVector& triangles = water_plane_model.GetData(); for(Model::TriangleVector::const_iterator it = triangles.begin(); it != triangles.end(); it++) { valueListTriangle[0] = (GzPointer)(*it)->vertices; valueListTriangle[1] = (GzPointer)(*it)->normals; valueListTriangle[2] = (GzPointer)(*it)->uvs; GzPutTriangle(in_renderer, 3, nameListTriangle, valueListTriangle); } return GZ_SUCCESS; }