1. 首页 > 电脑 >

计算机图形学大作业opengl 计算机图形学大作业光源

您好,今天小深来为大家解答以上的问题。计算机图形学大作业opengl相信很多小伙伴还不知道,现在让我们一起来看看吧!

计算机图形学大作业opengl 计算机图形学大作业光源计算机图形学大作业opengl 计算机图形学大作业光源


计算机图形学大作业opengl 计算机图形学大作业光源


1、很专业的,有专门吧,用于#3D的一种方法。

2、可是我们不采用,也不相信是有效的。

3、换一个吧。

4、图杭GIs软件真3D软件。

5、我也不是很懂,你验收一下(有两个参考资料)CS 535WEILER-ATHERTONPROBLEMImplement Weiler-Atherton. You should draw each polygon in a different color and fill the clip areas generated with a third color.NOTES:The Weiler-Atherton algorithm is the most general of the clipping algorithms. We he two 2D polygons (may be convex or conce and they both may he holes). The polygon to be clipped is called the SUBJECT polygon and the polygon defining the clipping area is called the CLIP polygon. To make the algorithm work easier (in the data structures, etc.) we usually assume that the exterior verts are given clockwise and the hole verts are given counterclockwise. In clipping we usually want to find the parts of the subject polygon that are inside the clip polygon. Howr, this algorithm can be used in modeling to find the "union", "intersection", and "difference" of the polygons.The data structures are sral circular linked lists of verts which are also linked toger and the clipping is done by trersing these. The lists could be doubly linked. This enables the trersal in either direction at any node in the list. Starting at a particular node and trersing in one direction will produce the interior polygon(s) while starting at a different node and trersing can produce the outside. Note that producing the exterior does need the doubly linking and care must be taken in performing the trersal.STEP 1:The first phase of the building of the data structures occurs when we input the edges and put them in two linked lists - the SUBJ list and the CLIP list. The verts are place in order from input (thus clockwise). There are separate lists for the exterior and for each hole. Thus, the initial build is a standard queue insert (input a vertex - insert it at end of list). Note that this creates a list in which a standard list trersal is equivalent to "walking around" the polygon edge visiting the verts in order.STEP 2:The second phase of the list building is computing and inserting the INTERSECTION points. If we he a SUBJECT polygon edge (SVi to SVi+1) that intersects a CLIP polygon edge (CVj to CVj+1) at a point INTER. Note that the edges form straight lines that may intersect, we are assuming that the line segments SVi to SVi+1 intersects the line segment CVj to CVj+1. The intersection point INTER is then inserted on BOTH of the linked lists - SUBJ and CLIP. It is inserted BETWEEN SVi and SVi+1 on the SUBJ list and CVj and CVj+1 on the CLIP list. The idea is still that trersing the list using a standard list trersal we would encounter the points in their geometric order. Note that there may be sral intersection points between any given pair of verts and they must be inserted in the correct order in the lists. This is done by using the t and u values comd in the vector line intersection subprogram. Each intersection point thus has TWO nodes - one on each list (SUBJ and CLIP). We link these two entries toger which provides a way of getting from one list to the other.STEP 2.5:Any straight line divides the plane into two half-planes. Thus each polygon edge (extended to a line) will divide the plane into two half-planes. Because we listed the verts clockwise, we consider the half-plane to the right as containing the interior of the polygon. Thus the right half-plane is called the interior half-plane. If we consider ourselves as "walking along" a polygon edge, then we can categorize each of the INTERSECTION points as "entering" or "exiting". This is usually done from the SUBJ polygon's point of view. Thus, as we walk along the SUBJ polygon edge SVi to SVi+1 and we encounter intersection point INTER, we can ask the question - am I "entering" the CLIP polygon or am I "exiting" the CLIP polygon? The second part of computing the intersection point is to classify them as "entering" or "exiting". We create one or two lists - one for entering intersections and one for exiting intersections.STEP3:Once the lists are built the basic idea to do the clipping is as followsPick an entry from the ENTERING list - it will be an intersection point (and delete it)Locate that point on the SUBJ listTrerse the current (SUBJ) list until you find the next intersection point - it should be an exiting or entering point. Output each vertex encountered to some data structure, say POLYFollow the link from the current (SUBJ) list to the other (CLIP) list andContinue the trersal until you find the next intersection (Note: delete each entering intersection from the ENTERING list - not the linked lists. By deleting it we will get the distinct intersecting polygons and not duplicate a polygon multiple times).Terminate the trersal when you get to an intersection that is the SAME as the initial one that yoemoved from the ENTERING list. At this point POLY will he one of the clip regions and can be output.REPEAT the construction and output of POLY until the ENTERING list is empty.Remark: For the exterior, try starting with an EXITING point. Start the trersal on the SUBJ list (same direction as the Interior). At what point do you need to use the double link and to trerse in the opite direction? (Hint: look at the CLIP polygon list).IMPLEMENTATION:In the below data structures we place all of the verts and intersection points in a 1D array and use the subscript instead of the actual coordinates.const int MAXVERT = 500;const int MAXPOLYV = 50;const int MAXH = 10;struct Point2D{float x,y;};typedef Point2D Verts[MAXVERT];enum VerType = ;typedef struct ClipListRec ClipPtr;struct ClipListRec{ int Vindex;ClipPtr next;VerType Kind;float t;ClipPtr otherList;}struct Polygon{ int nVertex;int vert[MAXPOLYV];ClipPtr list;}struct GenPolygon{ Polygon exterior;int numHoles;Polygon Holes[MAXH];}GenPolygon Sub,Clip;int entering[MAXVERT],exiting[MAXVERT];Verts V;int numVertex = 0; // size of the array of verticiesint clipPoly[MAXVERT]; // a clip polygonint readPoint();{ cin >> inX; cin >> inY;if (numVertex { V[numVertex].x = inX;V[numVertex].y = inY;idNo = numVertex;numVertex++;}elseidNo = -1;return idNo;}void readPolygon (GenPolygon p){ cin >> p.exterior.nVertex;for (i = 0; i { newId = readPoint();if (newId errorelse{ insertAtRear (p.exterior.list,newId);p.exterior.vert[i] = newId;}}// now do the holes basically the same way. . .}// the "main" program loop would then be (pseudocode)while (!EMPTY(entering)){ nextInter = delete (entering);SEARCH (SubjectPolygon,nextInter,ptr1);AddToOutputList (ptr1->. . .)StartPoint = ptr1->. . .ptr1 = prt1->next;while (ptr1->. . . != StartPoint){ AddToOutputList (ptr1->. . .);if (ptr1-> . . == INTERSECTION)ptr1 = prt1->otherList->next;elseptr1 = ptr1->next;}FixListForOutput();DrawPolygon();EmptyOutputList();}参考资料:。

本文到这结束,希望上面文章对大家有所帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 12345678@qq.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息