Esempio n. 1
0
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;
}
Esempio n. 2
0
	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;
		}
	}
Esempio n. 3
0
File: deriv.c Progetto: aosm/X11apps
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);
}
Esempio n. 4
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;
}