minhlap.allgoo.us
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.


When we control the event,we control your lives
 
Trang ChínhLatest imagesTìm kiếmĐăng kýĐăng Nhập
Tìm kiếm
 
 

Display results as :
 
Rechercher Advanced Search
Latest topics
» Tô màu theo vùng quét
Lớp Graphics Icon_minitimeTue Aug 13, 2013 4:18 pm by minhlap

» authentischen Hermes Lindy Taschen
Lớp Graphics Icon_minitimeWed Jan 23, 2013 11:15 am by cangliang

» Hermes Bag
Lớp Graphics Icon_minitimeWed Jan 23, 2013 11:14 am by cangliang

» Hermes Evelyn pm
Lớp Graphics Icon_minitimeWed Jan 23, 2013 11:13 am by cangliang

» Hermes Kelly bag billig
Lớp Graphics Icon_minitimeMon Jan 21, 2013 8:57 am by cangliang

» Hermes Constance Bag
Lớp Graphics Icon_minitimeMon Jan 21, 2013 8:56 am by cangliang

» Discout Hermes Belt
Lớp Graphics Icon_minitimeMon Jan 21, 2013 8:55 am by cangliang

» Christian Louboutin Love Flats
Lớp Graphics Icon_minitimeTue Jan 15, 2013 12:25 pm by cangliang

» Christian Louboutin Love Flats
Lớp Graphics Icon_minitimeTue Jan 15, 2013 12:25 pm by cangliang

Navigation
 Portal
 Diễn Đàn
 Thành viên
 Lý lịch
 Trợ giúp
 Tìm kiếm
March 2024
MonTueWedThuFriSatSun
    123
45678910
11121314151617
18192021222324
25262728293031
CalendarCalendar
Diễn Đàn
Affiliates
free forum


 

 Lớp Graphics

Go down 
2 posters
Tác giảThông điệp
minhlapb
Thành viên bậc 2
Thành viên bậc 2



Tổng số bài gửi : 32
Points : 90
Reputation : 2
Join date : 22/07/2009

Lớp Graphics Empty
Bài gửiTiêu đề: Lớp Graphics   Lớp Graphics Icon_minitimeWed Nov 04, 2009 4:35 pm

Có ai sửa dùm bài này cám ơn --- thầy cũng no way

bài mình làm là tạo một lớp Graphics de ve hinh trong OpenGL như chỗ hàm InitOpenGL nó không nhận ra các hàm sự kiện như myDraw trong glutDisplayFunc(myDraw);

file Graphics.h

#ifndef _GRAPHICS_H
#define _GRAPHICS_H

#include"glut.h"

struct colorentry
{
GLubyte Red;
GLubyte Blue;
GLubyte Green;
colorentry() {Red=Green=Blue=0; }
colorentry(GLbyte R,GLbyte G,GLbyte B)
{
Red=R;
Green=G;
Blue=B;
}
};
class Graphics
{
colorentry m_color;
void myInit();
void myDraw();
void OnSize(int width,int height);
void OnKeyDown(unsigned char key,int x, int y);
void OnMouse(int btn, int state, int x, int y);
void OnMotion(int x, int y);
void OnIdle();
public:
void InitOpenGL(int argc,char *argv[],char *s,int w=640,int h=480);
void PutPixel(int x,int y,colorentry c);
colorentry GetPixel(int x,int y);
void SetColor(colorentry c);;
void DrawLine_GL(int x1,int y1,int x2,int y2,colorentry c);
void DrawLineDDA(int x1,int y1,int x2,int y,colorentry c);
void DrawLineBresenham(int x1,int y1,int x2,int y2,colorentry c);
};

#endif



file Graphics.cpp

#include"Graphics.h"
#define Round(x) (int)(x+0.5)

void Graphics::PutPixel(int x,int y,colorentry c)
{
glColor3ub(c.Red,c.Green,c.Blue);
glBegin(GL_POINTS);
glVertex2f(x,y);
glEnd();
}
colorentry Graphics::GetPixel(int x,int y)
{
GLbyte color[3];
float Pos[4];
glRasterPos2d(x,y);
glGetFloatv(GL_CURRENT_RASTER_POSITION,Pos);
glReadPixels(Pos[0],Pos[1],1,1,GL_RGB,GL_UNSIGNED_BYTE,color);
return colorentry(color[0],color[1],color[2]);
}
void Graphics::SetColor(colorentry c)
{
glColor3ub(c.Red,c.Green,c.Blue);
}
void Graphics::DrawLine_GL(int x1,int y1,int x2,int y2,colorentry c)
{
glColor3ub(c.Red,c.Green,c.Blue);
glBegin(GL_LINES);
glVertex2f(x1,y1);
glVertex2f(x2,y2);
glEnd();
}
void Graphics::DrawLineDDA(int x1,int y1,int x2,int y2,colorentry c)
{
int x=x1;
float y=y2;
float m=(float)((y2-y1)/(x2-x1));
PutPixel(x,y1,c);
while(x<x2)
{
x++;
y+=m;
PutPixel(x,Round(y),c);
}
}
void Graphics::DrawLineBresenham(int x1,int y1,int x2,int y2,colorentry c)
{
int x=x1,y=y1;
int dx=x2-x1,dy=y2-y1;
int c1=(dy<<1);
int c2=((dy-dx)<<1);
int p=(dy<<1)-dx;
glBegin(GL_POINTS);

glVertex2i(x,y);
while(x<x2)
{
if(p<0)
p+=c1;
else
{
p+=c2;
y++;
}
++x;
glVertex2i(x,y);
}
glEnd();
}
void Graphics::InitOpenGL(int argc,char *argv[],char *s,int w,int h)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutInitWindowSize(w,h);
glutInitWindowPosition(100,100);
glutCreateWindow(s);
// thao tac su kien

myInit();
glutDisplayFunc(myDraw);///<---- không nhận ra hàm myDraw , cũng như // OnKeyDown, OnMouse. ...
glutReshapeFunc(OnSize);
glutKeyboardFunc(OnKeyDown);
glutMouseFunc(OnMouse);
glutMotionFunc(OnMotion);
glutIdleFunc(OnIdle);
glutPassiveMotionFunc(OnMotion);
glutMainLoop();

}
chưa đụng gi hàm main hết nó báo lỗi ở mấy dòng màu đỏ trên

Về Đầu Trang Go down
symphonyenigmatic
Thành viên bậc 3
Thành viên bậc 3
symphonyenigmatic


Tổng số bài gửi : 61
Points : 104
Reputation : 6
Join date : 26/07/2009
Age : 35
Đến từ : http:://thienthancntt.tk

Lớp Graphics Empty
Bài gửiTiêu đề: Re: Lớp Graphics   Lớp Graphics Icon_minitimeSat Nov 07, 2009 5:01 am

Báo lỗi chắc luôn.
Mình chỉ nói vd 1 hàm thôi, mấy thứ khác bạn tự liên tưởng nha.
glutDisplayFunc(myDraw). Đây là hàm mà thầy nói là mình viết code để cho ng ta sài. Tức là bạn viết code, nhưng bạn không sử dụng, mà là chuog trình nó sử dụng. hàm glutDisplayFunc là hàm do opengl định nghĩa, và cấu trúc hàm là: hàm này gọi tới 1 hàm, chứ không phải gọi tới 1 tham số. Vậy mih hỏi bạn nha, nó gọi hàm myDraw. Vậy hàm myDraw của bạn đâu?
Hiii..nói vậy thôi, lỗi rất đơn giản, thiếu hàm OnDraw. Nhưng mình nói hơi dài ở trên, vì có 1 điều chưa đúng theo logic, máy k báo, nhưng mà k hay.
Đó là mình nghĩ bạn hiểu sai ý của thầy rồi, khi đưa nguyên cả cái cục màu đỏ đỏ đó vào InitOpenGL. Thứ nhất là nó chưa tối ưu lắm. Vì có hàm thì sử dụng những cái trên, nhưng có khi thì sử dụng nhiều hơn, vậy làm như vậy là chưa dc.
Thứ 2, là không đúng tính chất Hướng Đối Tượng. Bạn chỉ bỏ phần khởi tạo vô thôi. Chứ mấy hàm đó ng ta định nghĩa rồi, vậy sao ng ta không viết luôn, mà cho phép ban viết hàm onDraw, vì ng ta muốn cho ng dùng tự định nghĩa ngay trong hàm main. Nếu bạn ghi ở đây, vậy khi dùng hàm main, thì phải vào đây định nghĩa lại. Nếu là ng dùng, họ có biết hàm CGraphics của bạn k?
Ngoài ra 1 số hàm khác nữa. Đã gọi là thư viện, tức là phải đúng trong mọi trường hơp, gọi là run.. Nên mình thấy bài của bạn hơi kì kì.. Bạn xem kĩ lại nhé! Thân!
Về Đầu Trang Go down
http://http:://thienthancntt.tk
minhlapb
Thành viên bậc 2
Thành viên bậc 2



Tổng số bài gửi : 32
Points : 90
Reputation : 2
Join date : 22/07/2009

Lớp Graphics Empty
Bài gửiTiêu đề: Re: Lớp Graphics   Lớp Graphics Icon_minitimeSat Nov 07, 2009 12:35 pm

trả lởi lạc đề nhiều quá.... những cái mà ng ta không muốn biết mà bắt người ta phải đọc thì thật là ác quá....
sai thì nói là sai, sao phe phán nhiu quá, uh mình dở mình tệ lắm....

tôi có khai báo hàm myDraw đàng hoàn nge, không xem ki mà nói cái j

nói tóm lại class Graphics như vậy là không đúng phải không
thì không dúng, thì chỉ ra chổ sai là dc rồi
nói linh tinh

Lớp Graphics C8e60298
Về Đầu Trang Go down
symphonyenigmatic
Thành viên bậc 3
Thành viên bậc 3
symphonyenigmatic


Tổng số bài gửi : 61
Points : 104
Reputation : 6
Join date : 26/07/2009
Age : 35
Đến từ : http:://thienthancntt.tk

Lớp Graphics Empty
Bài gửiTiêu đề: Re: Lớp Graphics   Lớp Graphics Icon_minitimeSat Nov 07, 2009 2:36 pm

Mình không thấy hàm myDraw trong file Graphics.cpp của bạn. Nếu bạn viết trong hàm main thì nó báo lỗi là đương nhiên.
Nếu có hàm myDraw ở đây, thì bạn phải viết theo kiểu hướng dt thì nó mới hiểu.
void Graphics::myDraw(void)
{
//............
}
Cuối cùng: nên đưa myDraw và mấy cái hàm opengl ra file main. Thân!
Về Đầu Trang Go down
http://http:://thienthancntt.tk
symphonyenigmatic
Thành viên bậc 3
Thành viên bậc 3
symphonyenigmatic


Tổng số bài gửi : 61
Points : 104
Reputation : 6
Join date : 26/07/2009
Age : 35
Đến từ : http:://thienthancntt.tk

Lớp Graphics Empty
Bài gửiTiêu đề: Re: Lớp Graphics   Lớp Graphics Icon_minitimeSat Nov 07, 2009 4:06 pm

Vẽ đường tròn bằng thuật toán MidPoint, thầy đưa vào hàm Get8Pixel
void CGraphics::Set8Pixel(int xc, int yc, int x, int y)
{
SetPixel(xc+x,yc+y);
SetPixel(xc+x,yc-y);
SetPixel(xc-x,yc+y);
SetPixel(xc-x,yc-y);
SetPixel(xc+y,yc+x);
SetPixel(xc+y,yc-x);
SetPixel(xc-y,yc+x);
SetPixel(xc-y,yc-x);
}

Vậy sao không phải là SetPixel (x, y)..hoặc là(xc, yc) và hàm chỉ đưa vào 2 tham số thôi? Mình không nói đến cách viết, mà là hỏi về ý tưởng, sao lại phải xc + rồi xc-.. Thực tế, mình viết 1 bài không dùng 2 tham số xc+x, xc-x, mà chỉ dùng x, và -x, nó vẫn vẽ dc theo thuật toán Midpoint. Bạn nào biết giải thích cho mình nghe với.
Về Đầu Trang Go down
http://http:://thienthancntt.tk
Sponsored content





Lớp Graphics Empty
Bài gửiTiêu đề: Re: Lớp Graphics   Lớp Graphics Icon_minitime

Về Đầu Trang Go down
 
Lớp Graphics
Về Đầu Trang 
Trang 1 trong tổng số 1 trang

Permissions in this forum:Bạn không có quyền trả lời bài viết
minhlap.allgoo.us :: Lập trình :: Lập Trình Hướng Đối Tượng,Đồ Họa OpenGL C, C++-
Chuyển đến