Kaynağa Gözat

Fixed cone primitive sometimes missing a face, fixed empty space in scene primitive property view

Ivan Safrin 12 yıl önce
ebeveyn
işleme
2b81a11bda

+ 29 - 36
Core/Contents/Source/PolyMesh.cpp

@@ -680,58 +680,51 @@ namespace Polycode {
 	
 	void Mesh::createCone(Number height, Number radius, int numSegments) {
 	
-	
-		setMeshType(Mesh::TRI_MESH);
-		Number lastx = -1;
-		Number lastz = -1;		
+        setMeshType(Mesh::TRI_MESH);
+        
+        Number lastx = 0;
+		Number lasty = 0;
+		Number lastv = 0;
+        
+        Polycode::Polygon *polygon;
 		for (int i=0 ; i < numSegments+1; i++) {
+			Number v = ((Number)i)/((Number)numSegments);
 			Number pos = ((PI*2.0)/((Number)numSegments)) * i;
-			Number x = sinf(pos) * radius;
-			Number z = cosf(pos) * radius;
+			Number x = sin(pos) * radius * 0.5;
+			Number y = cos(pos) * radius * 0.5;
 			
-			if(lastx > -1) {
-				Polygon *polygon = new Polygon();
-				polygon->addVertex(lastx,0,lastz,0,0);				
-				polygon->addVertex(x,0,z, 1, 0);
-				polygon->addVertex(0,height,0, 1, 1);				
-				addPolygon(polygon);							
-			
-
-				polygon = new Polygon();	
-				polygon->addVertex(x,0,z, 1, 1);												
-				polygon->addVertex(lastx,0,lastz, 1, 1);																														
-				polygon->addVertex(0,0,0,0,0);												
-				addPolygon(polygon);			
-
-								
-			}
+            if(i > 0) {
+                
+                polygon = new Polygon();
+                polygon->addVertex(lastx,0, lasty, 0.5+(lasty/radius*0.5), 0.5+(lastx/radius*0.5))->setNormal(0.0, -1.0, 0.0);
+                polygon->addVertex(x,0,y, 0.5+(y/radius*0.5), 0.5+(x/radius*0.5))->setNormal(0.0, -1.0, 0.0);                
+                polygon->addVertex(0,height,0,0.5,0.5)->setNormal(0.0, -1.0, 0.0);
+                addPolygon(polygon);
+                
+                
+                polygon = new Polygon();
+                polygon->addVertex(0,0,0,0.5,0.5)->setNormal(0.0, -1.0, 0.0);
+                polygon->addVertex(x,0,y, 0.5+(y/radius*0.5), 0.5+(x/radius*0.5))->setNormal(0.0, -1.0, 0.0);
+                polygon->addVertex(lastx,0, lasty, 0.5+(lasty/radius*0.5), 0.5+(lastx/radius*0.5))->setNormal(0.0, -1.0, 0.0);
+                addPolygon(polygon);
+            }
 			lastx = x;
-			lastz = z;			
-		/*
-			Polygon *polygon = new Polygon();
-			polygon->addVertex(w,0,h, 1, 1);
-			polygon->addVertex(0,0,h, 1, 0);
-			polygon->addVertex(0,0,0,0,0);
-			polygon->addVertex(w,0,0,0,1);
-			addPolygon(polygon);			
-			*/
+			lastv = v;
+			lasty = y;
         }
 		
 		for(int i=0; i < polygons.size(); i++) {
 			for(int j=0; j < polygons[i]->getVertexCount(); j++) {
-//				polygons[i]->getVertex(j)->x = polygons[i]->getVertex(j)->x - (radius/2.0f);
 				polygons[i]->getVertex(j)->y = polygons[i]->getVertex(j)->y - (height/2.0f);
-//				polygons[i]->getVertex(j)->z = polygons[i]->getVertex(j)->z - (radius/2.0f);	
 			}
 		}
 		
-		
 		calculateNormals();
 		calculateTangents();
 		arrayDirtyMap[RenderDataArray::VERTEX_DATA_ARRAY] = true;		
 		arrayDirtyMap[RenderDataArray::COLOR_DATA_ARRAY] = true;				
-		arrayDirtyMap[RenderDataArray::TEXCOORD_DATA_ARRAY] = true;						
-		arrayDirtyMap[RenderDataArray::NORMAL_DATA_ARRAY] = true;										
+		arrayDirtyMap[RenderDataArray::TEXCOORD_DATA_ARRAY] = true;
+		arrayDirtyMap[RenderDataArray::NORMAL_DATA_ARRAY] = true;
 		arrayDirtyMap[RenderDataArray::TANGENT_DATA_ARRAY] = true;			
 	
 	}

+ 9 - 9
IDE/Contents/Source/PolycodeProps.cpp

@@ -2521,7 +2521,7 @@ void ScenePrimitiveSheet::updatePrimitiveLabels() {
             option3Prop->enabled = true;
             option3Prop->visible = true;
             
-            propHeight = 45 + (45 * 3);
+            propHeight = 45 + (32 * 3);
         break;
         case ScenePrimitive::TYPE_PLANE:
             option1Prop->setPropName("Width");
@@ -2532,7 +2532,7 @@ void ScenePrimitiveSheet::updatePrimitiveLabels() {
             option2Prop->enabled = true;
             option2Prop->visible = true;
             
-            propHeight = 45 + (45 * 2);
+            propHeight = 45 + (32 * 2);
         break;
         case ScenePrimitive::TYPE_VPLANE:
             option1Prop->setPropName("Width");
@@ -2543,7 +2543,7 @@ void ScenePrimitiveSheet::updatePrimitiveLabels() {
             option2Prop->enabled = true;
             option2Prop->visible = true;
             
-            propHeight = 45 + (45 * 2);
+            propHeight = 45 + (32 * 2);
         break;
         case ScenePrimitive::TYPE_CYLINDER:
             option1Prop->setPropName("Length");
@@ -2557,7 +2557,7 @@ void ScenePrimitiveSheet::updatePrimitiveLabels() {
             option3Prop->enabled = true;
             option3Prop->visible = true;
             
-            propHeight = 45 + (45 * 3);
+            propHeight = 45 + (32 * 3);
         break;
         case ScenePrimitive::TYPE_UNCAPPED_CYLINDER:
             option1Prop->setPropName("Length");
@@ -2571,7 +2571,7 @@ void ScenePrimitiveSheet::updatePrimitiveLabels() {
             option3Prop->enabled = true;
             option3Prop->visible = true;
             
-            propHeight = 45 + (45 * 3);
+            propHeight = 45 + (32 * 3);
         break;
         case ScenePrimitive::TYPE_SPHERE:
             option1Prop->setPropName("Radius");
@@ -2585,7 +2585,7 @@ void ScenePrimitiveSheet::updatePrimitiveLabels() {
             option3Prop->enabled = true;
             option3Prop->visible = true;
             
-            propHeight = 45 + (45 * 3);
+            propHeight = 45 + (32 * 3);
         break;
         case ScenePrimitive::TYPE_TORUS:
             option1Prop->setPropName("Torus radius");
@@ -2602,7 +2602,7 @@ void ScenePrimitiveSheet::updatePrimitiveLabels() {
             option4Prop->enabled = true;
             option4Prop->visible = true;
             
-            propHeight = 45 + (45 * 4);
+            propHeight = 45 + (32 * 4);
         break;
         case ScenePrimitive::TYPE_CONE:
             option1Prop->setPropName("Length");
@@ -2616,7 +2616,7 @@ void ScenePrimitiveSheet::updatePrimitiveLabels() {
             option3Prop->enabled = true;
             option3Prop->visible = true;
             
-            propHeight = 45 + (45 * 3);
+            propHeight = 45 + (32 * 3);
         break;
         case ScenePrimitive::TYPE_CIRCLE:
             option1Prop->setPropName("Width");
@@ -2630,7 +2630,7 @@ void ScenePrimitiveSheet::updatePrimitiveLabels() {
             option3Prop->enabled = true;
             option3Prop->visible = true;
             
-            propHeight = 45 + (45 * 3);
+            propHeight = 45 + (32 * 3);
         break;
     }
     dispatchEvent(new Event(), Event::COMPLETE_EVENT);

+ 4 - 3
IDE/Contents/Source/TransformGizmo.cpp

@@ -119,20 +119,21 @@ TransformGizmo::TransformGizmo(Scene *targetScene, Camera *targetCamera) : Entit
 	
 	// MOVE
 	
-	yArrow = new ScenePrimitive(ScenePrimitive::TYPE_CONE, 0.2, 0.05, 12);
+	yArrow = new ScenePrimitive(ScenePrimitive::TYPE_CONE, 0.2, 0.1, 12);
 	yArrow->setColor(0.0, 1.0, 0.0, 1.0);
 	yArrow->setPosition(0.0, 1.0, 0.0);
 	yArrow->depthTest = false;
 	trasnformDecorators->addChild(yArrow);
+    yArrow->setMaterialByName("Unlit");
 	
-	xArrow = new ScenePrimitive(ScenePrimitive::TYPE_CONE, 0.2, 0.05, 12);
+	xArrow = new ScenePrimitive(ScenePrimitive::TYPE_CONE, 0.2, 0.1, 12);
 	xArrow->setColor(1.0, 0.0, 0.0, 1.0);
 	xArrow->setPosition(1.0, 0.0, 0.0);
 	xArrow->Roll(-90);
 	xArrow->depthTest = false;
 	trasnformDecorators->addChild(xArrow);
 
-	zArrow = new ScenePrimitive(ScenePrimitive::TYPE_CONE, 0.2, 0.05, 12);
+	zArrow = new ScenePrimitive(ScenePrimitive::TYPE_CONE, 0.2, 0.1, 12);
 	zArrow->setColor(0.0, 0.0, 1.0, 1.0);
 	zArrow->setPosition(0.0, 0.0, 1.0);
 	zArrow->Pitch(90);