全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1697
推到 Plurk!
推到 Facebook!

讀取及直接顯示網格

答題得分者是:ikk
5515531
一般會員


發表:19
回覆:44
積分:12
註冊:2008-04-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-02-11 11:47:35 IP:140.134.xxx.xxx 訂閱
我在之前有看到書裡有顯示網格的程式碼
所以我將它實現至C Builder中
但是卻出現問題卻不知道如何解決
能否請各位能不能幫我解決此問題
我將程式碼夾在檔案中
附加檔案:49924a570fcf4_3D.rar
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-02-18 11:06:54 IP:163.28.xxx.xxx 訂閱
你附的code需要其他檔案, 我無法compile..
你可以直接將error message post 上來....
------
FPGA驗證, FPGA開發平台, http://smims.com
5515531
一般會員


發表:19
回覆:44
積分:12
註冊:2008-04-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-02-18 12:56:41 IP:140.134.xxx.xxx 訂閱
他會出現Access violation at address 00401B81 in model 'Project1.exe'. Read of address 00000004這句話的視窗
但不能出現任何圖樣!!

不好意思~當初沒有說清楚~裡面有使用到OPENGL的Tool

後來嘗試了一下~是在下列的程式碼中出了問題~但這只是我認為啦!!
所以還是需要大大的幫忙!!

[code cpp]
void __fastcall TForm1::GLPanel1Render(TObject *Sender)
{
//ObjModel* model;
static int i;
static ObjTriangle* triangle;
static ObjGroup* group;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0f,0.0f,11.0f);
glColor4f(1.0,0.0,0.0,0.5);
// group = model->groups;
while(group)
{
glBegin(GL_TRIANGLES);
for(i=0; i < group->numtriangles; i )
{
triangle = &T(group->triangles[i]);
glVertex3fv(&model->vertices[3 * triangle->vindices[0]]);
glVertex3fv(&model->vertices[3 * triangle->vindices[1]]);
glVertex3fv(&model->vertices[3 * triangle->vindices[2]]);
}
glEnd();
group = group->next;
}
glEnd();
GLPanel1->SwapBuffers();
}
[/code]
由其是code"//"部分~主要問題應該是在這裡
編輯記錄
5515531 重新編輯於 2009-02-18 12:58:40, 註解 無‧
5515531 重新編輯於 2009-02-18 12:59:59, 註解 無‧
5515531 重新編輯於 2009-02-18 13:00:28, 註解 無‧
5515531 重新編輯於 2009-02-18 13:01:27, 註解 無‧
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-02-18 13:02:53 IP:163.28.xxx.xxx 訂閱
很明顯的
ObjModel * model;
是宣告指標, 但未給它實際的物件位址, 如下:
model = new ObjModel(); //可能需要參數, 要看ObjModel的class
------
FPGA驗證, FPGA開發平台, http://smims.com
5515531
一般會員


發表:19
回覆:44
積分:12
註冊:2008-04-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-02-18 13:27:50 IP:140.134.xxx.xxx 訂閱
ObjModel * model;
是我後來才令給他的~原本我沒有這一行指令的~因為在這code前面
我有設計結構

[code cpp]
typedef struct _ObjModel
{
char* mtllibname; // mtl 檔案名稱

int numvertices; // vertice 的數量
float* vertices; // 收集所有 vertice 的陣列

int numtexcoords; // 貼圖座標的數量
float* texcoords; // 貼圖座標的陣列

int numnormals; // normal 的數量
float* normals; // normal 的陣列

int numtriangles; // 圖形由多少個三角形組成
ObjTriangle* triangles; // 存放三角形的陣列

int nummaterials; // 圖形有多少個材質貼圖
ObjMaterial* materials; // 存放材質貼圖的陣列

int numgroups; // 圖形有多少個Group組成
ObjGroup* groups; // 連結每個 Group

} ObjModel;
[/code]

[code cpp]
typedef struct _ObjGroup
{
char* name; // Group名稱
int numtriangles; // 此 Group 由多少個三角形組成
int* triangles; // 指向三角形的陣列指標
int material; // 使用的material
struct _ObjGroup* next; // 指向下一個 Group

}ObjGroup;
[/code]
如果將ObjModel * model;去除,會出現我並沒有定義~
我在這連結指標部分~也是看書學的~所以很不懂
可以麻煩費心教一下我嗎?不好意思麻煩了!!
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-02-18 13:44:09 IP:163.28.xxx.xxx 訂閱
那你這個程式邏輯就有問題了...
ObjModel* model;
應該是要先產生出來, 才能用...
所以應該是說你沒有把資料填入 model中..
就把model拿來用.
當然會有問題.
------
FPGA驗證, FPGA開發平台, http://smims.com
5515531
一般會員


發表:19
回覆:44
積分:12
註冊:2008-04-16

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-02-19 10:52:15 IP:140.134.xxx.xxx 訂閱
可是我在ObjModel * model;指令上面已經都有結構定義
我還要再打一次嗎?
如果加進去~就如上面所說的會跑出沒有畫面
編輯記錄
5515531 重新編輯於 2009-02-19 10:52:49, 註解 無‧
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-02-19 11:16:38 IP:163.28.xxx.xxx 訂閱
你定義的只是結構.
並無資料,
ObjModel * model; 宣告的是指向你定義的資料結構的指標, 不是資料內容.
需要再產生一個記憶體存放此資料內容,如下:
model = new ObjModel;

此時
model 裡面的值, 是無意義的, 你必需先去給值.
------
FPGA驗證, FPGA開發平台, http://smims.com
5515531
一般會員


發表:19
回覆:44
積分:12
註冊:2008-04-16

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-02-19 15:07:51 IP:140.134.xxx.xxx 訂閱
那我應該怎麼給值讓他去執行呢?

[code cpp]
void __fastcall TForm1::GLPanel1Render(TObject *Sender)
{
ObjModel* model;
static int i;
static ObjTriangle* triangle;
static ObjGroup* group;

model = new ObjModel;

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0f,0.0f,11.0f);
glColor4f(1.0,0.0,0.0,0.5);

group = model->groups;
while(group)
{

glBegin(GL_TRIANGLES);
for(i=0; i < group->numtriangles; i )
{
triangle = &T(group->triangles[i]);

// glNormal3fv(&model->normals[3 * triangle->nindices[0]]);
glVertex3fv(&model->vertices[3 * triangle->vindices[0]]);

// glNormal3fv(&model->normals[3 * triangle->nindices[1]]);
glVertex3fv(&model->vertices[3 * triangle->vindices[1]]);

// glNormal3fv(&model->normals[3 * triangle->nindices[2]]);
glVertex3fv(&model->vertices[3 * triangle->vindices[2]]);

}
glEnd();

group = group->next;
}

glEnd();
GLPanel1->SwapBuffers();
}

[/code]
可否舉個例子教我~~麻煩了!!
編輯記錄
5515531 重新編輯於 2009-02-19 15:28:54, 註解 無‧
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#10 引用回覆 回覆 發表時間:2009-02-19 15:29:39 IP:163.28.xxx.xxx 訂閱
給資料結構值???
model->numvertices = 10; //其餘請依此類推

但是你的case中, model裡面要填什麼值, 你應該要很清楚吧, 畢竟是你建的struct.
------
FPGA驗證, FPGA開發平台, http://smims.com
5515531
一般會員


發表:19
回覆:44
積分:12
註冊:2008-04-16

發送簡訊給我
#11 引用回覆 回覆 發表時間:2009-02-22 14:41:01 IP:140.134.xxx.xxx 訂閱
非常謝謝你的教導!!
我會好好的吸收~~
雖然小弟不是很會!!但是起碼解決我這個指標問題~~謝謝!!
系統時間:2024-04-26 6:55:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!