الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

قراءة ملف ب c++

بدأه hbate_allah في 24 نوفمبر 2009 · 1 رد · 535 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لدي ملف من نوع خاص و اريد قراءته

الملف مبدئيا هكذا

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

بحيث

v وهى vertexs للمجسم

vn وهى normal vertexs

البيانات التى تبدأ بحرف f هى سطوح المجسم والتى تكون على هيئة مثلثات فى الغالب

طيب والعلامه // تشير الى ان ما على يسارها vertex وما على يمينها normal vertex

مهمة normal

يعتبر المتجه العمودى هو الاساس لتحديد الظاهر و الخفى. كذلك للقيام بالاسقاط الهندسى بشكل مناسب و اخيراً التعامل مع الأضاءة.

انا اريد ان اقراه لانني اريد ان استعمله فيما بعد لرسم المجسم

هاهو الكود

#include <stdlib.h>

#include <stdio.h>

#include <iostream>

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); traingle اضفتها لانني ان اردت ان ارسم مجسم اقسمه على شكل مثلثات

لكن العمل بالجداول غير منطقي لان الملف لا نعرف كم فيه من vertex لذا قررت التبديل و العمل ب vector

اي

vector<Vertex> v;

vector<Triangle> t;لكنني لم اعرف كيف ابدل

v[vertexCount].xاي كيف اضيف في الجدول الديناميكي

ارجو ان تكونوا قد فهمتم طريقتي و فهمتم ماذا يوجد في الملف و التعقيد الذي فيه لانني لا اعرف كم v توجد

#2

السلام عليكم

هذا الملف ليس ككل الملفات التي تكون قراءتها سهلة لانه في نظري معقد نوعا ما

و الشرح الذي شرحته هو جزء فقط من تعقيده لانه اعقد من هذا

ارجو ان اجد من يساعدني لانني توصلت الى تبديل الجدول ب dynamique table


vector<Triangle> 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);
....
vector<Vertex> v;	// added code

لكن

f v1[/vt1][/vn1] v2[/vt2][/vn2] v3[/vt3][/vn3]..

فمن ملف لاخر او من g لاخرى في نفس الملف يختلف تمثيلها فقد تكون بها 3 نقاط و قد عالجت هذه الحالة ب triangle لكن ان كانت اربع لم اعالجه او خمس نقاط اي على سكل خماسي لم اعرف كيف يمكنني ان اعرف من البداية هذا

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…