void ConeDistanceManipulator::UpdateShapes(Point3& origin, Point3& direction, float dist, float angle, bool useCube) { ClearPolyShapes(); // Create the circle at the base of the cone PolyShape shape; // AddCubeShape(shape, Point3(0.0f, 0.0f, -dist), mGizmoScale); // AppendPolyShape(&shape); Mesh* pMesh; Point3 center(0.0f, 0.0f, -dist); if (useCube) pMesh = MakeBox(center, mGizmoScale, mGizmoScale, mGizmoScale, 1, 1, 1); else pMesh = MakeSphere(center, mGizmoScale, 10); AppendMesh(pMesh, ManipulatorGizmo::kGizmoScaleToViewport, GetUnselectedColor()); // Store the definitions away mOrigin = origin; mDirection = direction; mAngle = angle; mDistance = dist; }
void Mesh::MakeMesh(MeshType type, uint steps) { switch (type) { case MeshType::MeshTypeCube: MakeCube(); break; case MeshType::MeshTypeCylinder: MakeCylinder(steps); break; case MeshType::MeshTypeSphere: MakeSphere(steps); break; default: Trace::WriteLine(String::Format("Unknown mesh type:{0}", type)); break; } }
static void Init(void) { static const char *fragShaderText = "uniform ivec2 WinSize; \n" "void main() {\n" " vec2 d = dFdy(gl_TexCoord[0].xy) * vec2(WinSize); \n" " gl_FragColor = vec4(d.x, d.y, 0.0, 1.0);\n" " // gl_FragColor = gl_TexCoord[0];\n" "}\n"; static const char *vertShaderText = "void main() {\n" " gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n" " gl_TexCoord[0] = gl_MultiTexCoord0;\n" "}\n"; if (!ShadersSupported()) exit(1); vertShader = CompileShaderText(GL_VERTEX_SHADER, vertShaderText); fragShader = CompileShaderText(GL_FRAGMENT_SHADER, fragShaderText); program = LinkShaders(vertShader, fragShader); glUseProgram(program); WinSizeUniform = glGetUniformLocation(program, "WinSize"); /*assert(glGetError() == 0);*/ glClearColor(0.3f, 0.3f, 0.3f, 0.0f); glEnable(GL_DEPTH_TEST); MakeSphere(); MakeRect(); CurList = SphereList; printf("GL_RENDERER = %s\n",(const char *) glGetString(GL_RENDERER)); assert(glIsProgram(program)); assert(glIsShader(fragShader)); assert(glIsShader(vertShader)); glColor3f(1, 0, 0); }
void System::CreateObjects(int x, int y, int z, double posX, double posY, double posZ, bool rnd,int type){ mNumCurrentSpheres+=x*y*z; ChSharedBodyPtr mrigidBody; for (int xx=0; xx<x; xx++){ for (int yy=0; yy<y; yy++){ for (int zz=0; zz<z; zz++){ ChVector<> mParticlePos((xx-(x-1)/2.0)+posX,(yy)+posY,(zz-(z-1)/2.0)+posZ); ChQuaternion<> quat=ChQuaternion<>(1,0,0,0);; if(rnd){ mParticlePos.x+=(rand()%1000)/4000.f; mParticlePos.y+=(rand()%1000)/4000.f; mParticlePos.z+=(rand()%1000)/4000.f; quat.Q_from_NasaAngles(ChVector<>((rand()%4000)/1000.0f,(rand()%4000)/1000.f,(rand()%4000)/1000.f)); } mrigidBody = ChSharedBodyPtr(new ChBodyGPU); if(type==0){MakeSphere(mrigidBody, mSphereRadius, mSphereMass, mParticlePos, mMu, mMu, mSphereRestitution, true);} if(type==1){MakeBox(mrigidBody, ChVector<>(mSphereRadius,mSphereRadius,mSphereRadius), mSphereMass, mParticlePos,quat, mMu, mMu, mSphereRestitution,mNumCurrentObjects,mNumCurrentObjects,true, false);} if(type==2){MakeEllipsoid(mrigidBody, ChVector<>(mSphereRadius*2,mSphereRadius,mSphereRadius*2), mSphereMass, mParticlePos,quat, mMu, mMu, mSphereRestitution, true);} mNumCurrentObjects++; } } } }
static void Init(void) { static const char *fragShaderText = "uniform vec4 diffuse;\n" "uniform vec4 specular;\n" "varying vec3 normal;\n" "void main() {\n" " // Compute dot product of light direction and normal vector\n" " float dotProd = max(dot(gl_LightSource[0].position.xyz, \n" " normalize(normal)), 0.0);\n" " // Compute diffuse and specular contributions\n" " gl_FragColor = diffuse * dotProd + specular * pow(dotProd, 20.0);\n" "}\n"; static const char *vertShaderText = "varying vec3 normal;\n" "void main() {\n" " gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n" " normal = gl_NormalMatrix * gl_Normal;\n" "}\n"; const char *version; version = (const char *) glGetString(GL_VERSION); if (version[0] != '2' || version[1] != '.') { printf("This program requires OpenGL 2.x, found %s\n", version); exit(1); } GetExtensionFuncs(); fragShader = glCreateShader_func(GL_FRAGMENT_SHADER); if (FragProgFile) ReadShader(fragShader, FragProgFile); else LoadAndCompileShader(fragShader, fragShaderText); vertShader = glCreateShader_func(GL_VERTEX_SHADER); if (VertProgFile) ReadShader(vertShader, VertProgFile); else LoadAndCompileShader(vertShader, vertShaderText); program = glCreateProgram_func(); glAttachShader_func(program, fragShader); glAttachShader_func(program, vertShader); glLinkProgram_func(program); CheckLink(program); glUseProgram_func(program); uDiffuse = glGetUniformLocation_func(program, "diffuse"); uSpecular = glGetUniformLocation_func(program, "specular"); uTexture = glGetUniformLocation_func(program, "texture"); printf("DiffusePos %d SpecularPos %d TexturePos %d\n", uDiffuse, uSpecular, uTexture); glUniform4fv_func(uDiffuse, 1, diffuse); glUniform4fv_func(uSpecular, 1, specular); /* assert(glGetError() == 0);*/ glUniform1i_func(uTexture, 2); /* use texture unit 2 */ /*assert(glGetError() == 0);*/ if (CoordAttrib) { int i; glBindAttribLocation_func(program, CoordAttrib, "coord"); i = glGetAttribLocation_func(program, "coord"); assert(i >= 0); if (i != CoordAttrib) { printf("Hmmm, NVIDIA bug?\n"); CoordAttrib = i; } else { printf("Mesa bind attrib: coord = %d\n", i); } } /*assert(glGetError() == 0);*/ glClearColor(0.3f, 0.3f, 0.3f, 0.0f); glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHT0); glEnable(GL_LIGHTING); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diffuse); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular); glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 20.0f); MakeSphere(); MakeRect(); CurList = SphereList; #if TEXTURE MakeTexture(); #endif printf("GL_RENDERER = %s\n",(const char *) glGetString(GL_RENDERER)); printf("Press p to toggle between per-pixel and per-vertex lighting\n"); /* test glGetShaderSource() */ if (0) { GLsizei len = strlen(fragShaderText) + 1; GLsizei lenOut; GLchar *src =(GLchar *) malloc(len * sizeof(GLchar)); glGetShaderSource_func(fragShader, 0, NULL, src); glGetShaderSource_func(fragShader, len, &lenOut, src); assert(len == lenOut + 1); assert(strcmp(src, fragShaderText) == 0); free(src); } assert(glIsProgram_func(program)); assert(glIsShader_func(fragShader)); assert(glIsShader_func(vertShader)); glColor3f(1, 0, 0); /* for testing state vars */ { static GLfloat fc[4] = { 1, 1, 0, 0 }; static GLfloat amb[4] = { 1, 0, 1, 0 }; glFogfv(GL_FOG_COLOR, fc); glLightfv(GL_LIGHT1, GL_AMBIENT, amb); } #if 0 TestFunctions(); #else (void) TestFunctions; #endif }
int main(void) { GLfloat vtx[3*3*2*8*16],texCoord[3*3*2*8*16],nom[3*3*2*8*16],col[3*4*2*8*16]; int nVtx=MakeSphere(vtx,texCoord,nom,col,16,8); YsBitmap bmp[6]; bmp[0].LoadPng("explosion01.png"); bmp[1].LoadPng("explosion02.png"); bmp[2].LoadPng("explosion03.png"); bmp[3].LoadPng("explosion04.png"); bmp[4].LoadPng("explosion05.png"); bmp[5].LoadPng("flash01.png"); FsOpenWindow(16,16,800,600,1); YsGLSL3DRenderer *variColorPerVtxShadingRenderer=YsGLSLCreateVariColorPerVtxShading3DRenderer(); YsGLSL3DRenderer *monoColorPerVtxShadingRenderer=YsGLSLCreateMonoColorPerVtxShading3DRenderer(); YsGLSL3DRenderer *monoColorPerPixShadingRenderer=YsGLSLCreateMonoColorPerPixShading3DRenderer(); YsGLSL3DRenderer *variColorPerPixShadingRenderer=YsGLSLCreateVariColorPerPixShading3DRenderer(); YsGLSL3DRenderer *monoColorPerVtxShadingWithTexRenderer=YsGLSLCreateMonoColorPerVtxShadingWithTexCoord3DRenderer(); YsGLSL3DRenderer *variColorPerVtxShadingWithTexRenderer=YsGLSLCreateVariColorPerVtxShadingWithTexCoord3DRenderer(); YsGLSL3DRenderer *monoColorPerPixShadingWithTexRenderer=YsGLSLCreateMonoColorPerPixShadingWithTexCoord3DRenderer(); YsGLSL3DRenderer *variColorPerPixShadingWithTexRenderer=YsGLSLCreateVariColorPerPixShadingWithTexCoord3DRenderer(); YsGLSL3DRenderer *renderer3d=monoColorPerVtxShadingRenderer; printf("SPACE Switch between Per Vertex and Per Pixel renderers.\n"); GLuint texId; glGenTextures(1,&texId); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D,texId); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,bmp[0].GetWidth(),bmp[0].GetHeight(),0,GL_RGBA,GL_UNSIGNED_BYTE,bmp[0].GetRGBABitmapPointer()); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); double rot=0.0; int bmpId=0; for(int key=FSKEY_NULL; FSKEY_ESC!=key; FsSleep(10)) { FsPollDevice(); key=FsInkey(); switch(key) { case FSKEY_ENTER: bmpId=(bmpId+1)%6; glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,bmp[bmpId].GetWidth(),bmp[bmpId].GetHeight(),0,GL_RGBA,GL_UNSIGNED_BYTE,bmp[bmpId].GetRGBABitmapPointer()); break; case FSKEY_SPACE: if(renderer3d==monoColorPerVtxShadingRenderer) { renderer3d=monoColorPerPixShadingRenderer; } else if(renderer3d==monoColorPerPixShadingRenderer) { renderer3d=variColorPerVtxShadingRenderer; } else if(renderer3d==variColorPerVtxShadingRenderer) { renderer3d=variColorPerPixShadingRenderer; } else if(renderer3d==variColorPerPixShadingRenderer) { renderer3d=monoColorPerVtxShadingWithTexRenderer; } else if(renderer3d==monoColorPerVtxShadingWithTexRenderer) { renderer3d=variColorPerVtxShadingWithTexRenderer; } else if(renderer3d==variColorPerVtxShadingWithTexRenderer) { renderer3d=monoColorPerPixShadingWithTexRenderer; } else if(renderer3d==monoColorPerPixShadingWithTexRenderer) { renderer3d=variColorPerPixShadingWithTexRenderer; } else { renderer3d=monoColorPerVtxShadingRenderer; } break; } glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glEnable(GL_DEPTH_TEST); int wid,hei; FsGetWindowSize(wid,hei); const double aspect=(double)wid/(double)hei; GLfloat modelview[16],projection[16],tfm[16]; YsGLMakePerspectivefv(projection,YSGLPI/6.0,aspect,1.0,50.0); YsGLMakeIdentityfv(modelview); YsGLMakeTranslationfv(tfm,0.0,0.0,-15.0); YsGLMultMatrixfv(modelview,modelview,tfm); YsGLMakeXZRotationfv(tfm,rot); YsGLMultMatrixfv(modelview,modelview,tfm); YsGLMakeScalingfv(tfm,3.0,3.0,3.0); YsGLMultMatrixfv(modelview,modelview,tfm); YsGLSLUse3DRenderer(monoColorPerVtxShadingRenderer); YsGLSLSet3DRendererProjectionfv(monoColorPerVtxShadingRenderer,projection); YsGLSLSet3DRendererModelViewfv(monoColorPerVtxShadingRenderer,modelview); YsGLSLEndUse3DRenderer(monoColorPerVtxShadingRenderer); YsGLSLUse3DRenderer(variColorPerVtxShadingRenderer); YsGLSLSet3DRendererProjectionfv(variColorPerVtxShadingRenderer,projection); YsGLSLSet3DRendererModelViewfv(variColorPerVtxShadingRenderer,modelview); YsGLSLEndUse3DRenderer(variColorPerVtxShadingRenderer); YsGLSLUse3DRenderer(monoColorPerPixShadingRenderer); YsGLSLSet3DRendererProjectionfv(monoColorPerPixShadingRenderer,projection); YsGLSLSet3DRendererModelViewfv(monoColorPerPixShadingRenderer,modelview); YsGLSLEndUse3DRenderer(monoColorPerPixShadingRenderer); YsGLSLUse3DRenderer(variColorPerPixShadingRenderer); YsGLSLSet3DRendererProjectionfv(variColorPerPixShadingRenderer,projection); YsGLSLSet3DRendererModelViewfv(variColorPerPixShadingRenderer,modelview); YsGLSLEndUse3DRenderer(variColorPerPixShadingRenderer); YsGLSLUse3DRenderer(monoColorPerVtxShadingWithTexRenderer); YsGLSLSet3DRendererProjectionfv(monoColorPerVtxShadingWithTexRenderer,projection); YsGLSLSet3DRendererModelViewfv(monoColorPerVtxShadingWithTexRenderer,modelview); YsGLSLEndUse3DRenderer(monoColorPerVtxShadingWithTexRenderer); YsGLSLUse3DRenderer(variColorPerVtxShadingWithTexRenderer); YsGLSLSet3DRendererProjectionfv(variColorPerVtxShadingWithTexRenderer,projection); YsGLSLSet3DRendererModelViewfv(variColorPerVtxShadingWithTexRenderer,modelview); YsGLSLEndUse3DRenderer(variColorPerVtxShadingWithTexRenderer); YsGLSLUse3DRenderer(monoColorPerPixShadingWithTexRenderer); YsGLSLSet3DRendererProjectionfv(monoColorPerPixShadingWithTexRenderer,projection); YsGLSLSet3DRendererModelViewfv(monoColorPerPixShadingWithTexRenderer,modelview); YsGLSLEndUse3DRenderer(monoColorPerPixShadingWithTexRenderer); YsGLSLUse3DRenderer(variColorPerPixShadingWithTexRenderer); YsGLSLSet3DRendererProjectionfv(variColorPerPixShadingWithTexRenderer,projection); YsGLSLSet3DRendererModelViewfv(variColorPerPixShadingWithTexRenderer,modelview); YsGLSLEndUse3DRenderer(variColorPerPixShadingWithTexRenderer); glEnable(GL_CULL_FACE); glFrontFace(GL_CW); YsGLSLUse3DRenderer(renderer3d); YsGLSLSet3DRendererTextureType(renderer3d,YSGLSL_TEX_TYPE_BILLBOARD); const GLfloat billBoardCenter[3]={0,0,0}; const GLfloat billBoardDimension[2]={3.0f,3.0f}; YsGLSLSet3DRendererBillBoardfv(renderer3d,billBoardCenter,billBoardDimension); GLfloat color[4]={0,0,1,1}; YsGLSLSet3DRendererUniformColorfv(renderer3d,color); if(renderer3d!=monoColorPerPixShadingWithTexRenderer && renderer3d!=variColorPerPixShadingWithTexRenderer && renderer3d!=monoColorPerVtxShadingWithTexRenderer && renderer3d!=variColorPerVtxShadingWithTexRenderer) { YsGLSLDrawPrimitiveVtxNomColfv(renderer3d,GL_TRIANGLES,nVtx,vtx,nom,col); } else if(renderer3d==monoColorPerPixShadingWithTexRenderer || renderer3d==monoColorPerVtxShadingWithTexRenderer) { YsGLSLDrawPrimitiveVtxTexCoordNomfv(renderer3d,GL_TRIANGLES,nVtx,vtx,texCoord,nom); } else if(renderer3d==variColorPerPixShadingWithTexRenderer || renderer3d==variColorPerVtxShadingWithTexRenderer) { YsGLSLDrawPrimitiveVtxTexCoordNomColfv(renderer3d,GL_TRIANGLES,nVtx,vtx,texCoord,nom,col); } YsGLSLEndUse3DRenderer(renderer3d); FsSwapBuffers(); rot+=YSGLPI/30.0; } YsGLSLDelete3DRenderer(monoColorPerVtxShadingRenderer); YsGLSLDelete3DRenderer(variColorPerVtxShadingRenderer); YsGLSLDelete3DRenderer(monoColorPerPixShadingRenderer); return 0; }