v 0.0 0.0 0.0
v 0.0 0.0 1.0
v 0.0 1.0 0.0
v 0.0 1.0 1.0
v 1.0 0.0 0.0
v 1.0 0.0 1.0
v 1.0 1.0 0.0
v 1.0 1.0 1.0
vn 0.0 0.0 1.0
vn 0.0 0.0 -1.0
vn 0.0 1.0 0.0
vn 0.0 -1.0 0.0
vn 1.0 0.0 0.0
vn -1.0 0.0 0.0
f 1//2 7//2 5//2
f 1//2 3//2 7//2
f 1//6 4//6 3//6
f 1//6 2//6 4//6
f 3//3 8//3 7//3
f 3//3 4//3 8//3
f 5//5 7//5 8//5
f 5//5 8//5 6//5
f 1//4 5//4 6//4
f 1//4 6//4 2//4
f 2//1 6//1 8//1
f 2//1 8//1 4//1
#include
#include
#include
struct Triangle {
int v1;
int v2;
int v3;
};
struct Vertex {
float x;
float y;
float z;
};
using namespace std;
static void display(void)
{
// move the view a lil down so we could get the tree.obj in the centre of screen
glTranslatef(0.0, -0.50, 0.0);
// clear all pixels
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
Vertex v[50000];
Triangle t[50000];
int vertexCount = 0;
int triangleCount = 0;
char line[100];
FILE *fp = fopen("cube.obj","r");
if (fp != NULL)
{
while (fgets(line, 99, fp))
{
if (line[0] == 'v')
{
sscanf(line, "%*c %f %f %f", &v[vertexCount].x, &v[vertexCount].y, &v[vertexCount].z);
vertexCount++;
}
else if (line[0] == 'f')
{
sscanf(line, "%*c %d %d %d", &t[triangleCount].v1, &t[triangleCount].v2, &t[triangleCount].v3);
triangleCount++;
}
}
}
fclose(fp);
vector v;
vector t;
v[vertexCount].x
#include
#include
#include
#include // added code
struct Triangle {
int v1;
int v2;
int v3;
};
struct Vertex {
float x;
float y;
float z;
};
using namespace std;
static void display(void)
{
// move the view a lil down so we could get the tree.obj in the centre of screen
glTranslatef(0.0, -0.50, 0.0);
// clear all pixels
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
//Vertex v[50000]; // deleted code
//Triangle t[50000]; // deleted code
//int vertexCount = 0; // deleted code
//int triangleCount = 0; // deleted code
vector v; // added code
vector t; // added code
char line[100];
FILE *fp = fopen("cube.obj","r");
if (fp != NULL)
{
Vertex tempV;
Triangle tempT;
while (fgets(line, 99, fp))
{
if (line[0] == 'v')
{
sscanf(line, "%*c %f %f %f", &tempV.x, &tempV.y, &tempV.z); // modified code
//vertexCount++; // deleted code
v.push_back(tempV); // added code
}
else if (line[0] == 'f')
{
sscanf(line, "%*c %d %d %d", &tempT.v1, &tempT.v2, &tempT.v3); // modified code
//triangleCount++; // deleted code
t.push_back(tempT); // added code
}
}
}
fclose(fp);
....
g objet
usemlt chrome // اسم الصورة المستعملة للاكساء اي اننا سنضيف جدول به اسم الصورة الخاصة بالاكساء مع النقاط المخصصة لها
v -0.0729698 0.416975 -0.0005
v -0.07242360.417279 0.00589344
v -0.0722358 0.422193 -0.00559925
vt 0.12 0.01 0.03
vt .......// اي مثل سابقتها
vt .......
vn .......
vn ..........
f
f
g head
usemelt head1
v.............
v.........
vt ..........
vn......
فكما تلاحظ ان ملف واحد من الممكن ان نجد فيه اكثر من تصميم لمجسم او بالاحرى نقسم المجسم لاجزاء كل جزء يبدا ب g اي كما اظن اننا يجب ان نضيف جدول اخر نضع فيه g و نرطبطهم بvertex الخاصة بهم هذا من جهة f v1[/vt1][/vn1] v2[/vt2][/vn2] v3[/vt3][/vn3]...
فمن ملف لاخر او من g لاخرى في نفس الملف يختلف تمثيلها فقد تكون بها 3 نقاط و قد عالجت هذه الحالة ب triangle لكن ان كانت اربع لم اعالجه او خمس نقاط اي على سكل خماسي لم اعرف كيف يمكنني ان اعرف من البداية هذا
struct Geometry
{
string name;
vector vertices;
vector normals;
vector triangles;
string materialName;
};
vector<geometry*> allGeometry;
int main()
{
Geometry *geom = NULL;
.
.
.
// قراءة الملف
.
.
if (line[0] == 'g')
{
// مجسم جديد. إن كنا قد قرأنا مجسماً سابقاً فأضفه لقائمة المجسمات في الملف
if (geom != NULL)
allGeometry.push_back(geom);
geom = new Geometry(); // افتتح مجسماً جديداً
}
else if (line[0] == 'v')
{
Vertex vtx;
sscanf(line, "%*c %f %f %f", &vtx.x, &vtx.y, &vtx.z);
geom->vertices.push_back(vtx); // إضافة رأس للمجسم
}
.
.
.
}
sscanf(line, "%*c %f %f %f", &vtx.x, &vtx.y, &vtx.z);
وفي 09/ذو الحجة/1430 02:23 ص، قال وسام البهنسي متحمساً:
لم أكن أعلم أنك تستطيع استخدام النجمة * لإخبار scanf بتجاهل هذا المُدخل.وفي 09/ذو الحجة/1430 02:20 ص، ظهر شبح ابتسامة على وجه وسام البهنسي وهو يقول:
أنصحك بعدم تشويش نفسك بتفاصيل الأداء الآن. فقط اجعل الكود قادراً على العمل بشكل صحيح.أما في 09/ذو الحجة/1430 02:20 ص، فقد تنهد وسام البهنسي بارتياح وهو يرد:
struct Geometrystruct Face_Entry {
Vertex v;
Vertex_Texture vt;
Vertex_Normal vn;
bool vt_avialable;// هل يوجد اكساء ام لا
bool vn_avialable;// هل يوجد ناظم ام لا
};
struct Face {
vector e;
};
vector faces;
ما رايك في هذا