Phần 1 7
Lập trình đồ họa với Java 2D 7
Chương 1 8
Tổng quan về Java 2D API 8
1.1 Enhanced Graphics, Text, and imaging 8
1.2 Rendering Model 9
1.2.1 Coordinate Systems 9
1.2.1.1 User Space 9
1.2.1.2 Device Space 10
1.2.2 Transforms 10
1.2.3 Fonts 10
1.2.4 Images 11
1.2.5 Fills and Strokes 12
1.2.6 Composites 12
Backward Compatibility and Platform independence 13
1.3.1 Backward Compatibility 13
1.3.2 Platform independence 14
1.4 The Java 2D™ API Packages 14
Chương 2: 17
Rendering with Graphics2D 17
2.1 Các lớp và giao diện. 17
2.2 Rendering Concepts 18
2.2.1 Rendering Process 18
2.2.2 Controlling Rendering Quality 19
2.2.3 Stroke Attributes 20
2.2.4 Fill Attributes 21
Quá trình xử lý theo phiên 21
2.2.5 Clipping Paths 22
2.2.6 Transformations 22
2.2.6.1 Constructing an AffineTransform 23
2.2.7 Composite Attributes 24
2.2.7.1 Managing Transparency 24
2.2.7.2 Transparency and images 25
2.3 Thiết lập Graphics2Context 25
2.3.1 Setting Rendering Hints 25
2.3.2 Specifying Stroke Attributes 26
2.3.2.1 Setting the Stroke Width 26
2.3.2.2 Specifying Join and Endcap Styles 26
2.3.2.3 Setting the Dashing Pattern 26
2.3.3 Specifying Fill Attributes 27
2.3.3.1 Filling a Shape with a Gradient 27
2.3.3.2 Filling a Shape with a Texture 27
2.3.4 Setting the Clipping Path 28
2.3.5 Setting the Graphics2D Transform 29
2.3.6 Specifying a Composition Style 30
2.3.6.1 Using the Source Over Compositing Rule 30
2.3.6.2 Increasing the Transparency of Composited Objects 30
2.4 Rendering Graphics Primitives 31
2.4.1 Drawing a Shape 31
2.4.2 Filling a Shape 32
2.4.3 Rendering Text 32
2.4.4 Rendering images 32
2.5 Defining Custom Composition Rules 33
2.6 Rendering in a Multi-Screen Environment 33
Chương 3 41
Các đối tượng hình họa 41
3.1 Giao diện và lớp. 41
3.2 Các khái niệm hình học: 43
3.2.1 Constructive Area Geometry 43
3.2.2 Bounds and Hit Testing 43
3.3 Combining Areas to Create New Shapes 47
Chương 4: 50
Hiển thị Font và văn bản 50
4.1.Giao diện và lớp. 50
4.2.Các khái niệm về Font 51
4.3 Các khái niệm về Text Layout. 52
4.3.1 Vẽ chữ. 52
4.3.2 Ordering Text 54
4.3.3 Đo và định vị văn bản 55
4.3.4 Hỗ trợ thao tác với văn bản. 55
4.3.4.1 Hiển thị dấu nhắc 55
4.3.4.2 Di chuyển dấu nhắc. 56
4.3.4.3 Hit Testing 57
4.3.4.4 Đánh dấu vùng lựa chọn. 58
4.3.5 Thực thi việc hiển thị văn bản trong ứng dụng Java™ . 58
Quản lý việc hiển thị văn bản. 59
4.4.1 Trình bày văn bản. 60
Hiển thị dấu nhắc kép. 60
4.4.3 Di chuyển dấu nhắc. 61
4.4.4 Hit Testing 61
4.4.5 Đánh dấu vùng lựa chọn. 61
4.4.6 Querying Layout Metrics 61
4.4.7 Vẽ văn bản trên nhiều dòng. 62
Chương 5 66
Tạo ảnh 66
5.1 Các giao diện và các lớp 66
5.1.1 Các giao diện imaging (imaging interfaces) 66
5.1.2 Các lớp dữ liệu ảnh(image Data Classes) 67
5.1.3 image Operation Classes 68
5.1.4 Sample Model Classes 68
Color Model Classes 69
5.1.6 Exception Classes 70
5.2 Immediate Mode imaging Concepts 70
5.2.1 Terminology 71
5.3 Using Bufferedimages 72
5.3.1 Creating a Bufferedimage 72
5.3.2 Drawing in an Offscreen Buffer 73
5.3.2.1 Creating an Offscreen Buffer 73
5.3.2.2 Drawing in an Offscreen Buffer 74
5.3.3 Manipulating Bufferedimage Data Directly 75
5.3.4 Filtering a Bufferedimage 75
5.3.5 Rendering a Bufferedimage 75
5.4 Managing and Manipulating Rasters 78
5.4.1 Creating a Raster 79
5.4.2 Parent and Child Rasters 79
5.4.4 The WritableRaster Subclass 79
5.5 Image Data and DataBuffers 79
5.6 Extracting Pixel Data from a SampleModel 80
5.7 ColorModels and Color Data 81
5.7.1 Lookup Table 81
5.8 image Processing and Enhancement 81
5.8.1 Using an image Processing Operation 83
Chương 6 85
Mầu sắc 85
6.1 Các lớp 85
6.2 Những định nghĩa về mầu sắc. 86
6.2.1 Không gian mầu 86
6.2.1 Biểu diễn màu 88
Chương 7 90
In ấn 90
7.1 Các giao diện và các lớp 90
7.2.1 Supporting Printing 91
7.2.1.1 Điều khiển in (Job Control) 91
7.2.2 Page Painters 92
7.2.3 Printable Jobs and Pageable Jobs 93
7.2.4 Typical Life-Cycle of a PrinterJob 94
7.3 Printing with Printables 95
7.3.2 Printing a File 96
7.4.1 Using a Pageable Job 99
7.4.2 Using Multiple Page Painters 100
Phần 2 106
Lập trình đồ họa với Java 3D 106
CHƯƠNG 1 107
NHẬP MÔN LẬP TRÌNH TRÊN JAVA 3D 107
1.1 Tổng quan về Java 3D API ™ 107
1.2 Các vấn đề cơ bản về Java 3D API™ 107
1.3 Xây dựng đồ thị khung cảnh 108
1.3.1 Thừa kế cấp cao từ Java 3D API 111
1.4 Cách thức để viết một chương trình Java 3D 112
1.4.1 Công thức đơn giản để viết một chương trình Java 3D 112
1.5 Một vài thuật ngữ trong Java 3D 115
1.6 Ví dụ đơn giản: HelloJava3Da 116
1.6.1 Các lớp của Java 3D Classes được sử dụng trong HelloJava3Da 120
Tạo nên hình lập phương có kích thước được định ra bởi các giá trị cho trước. 122
1.7 Quay hình lập phương 122
1.7.1 Sự kết hợp của các phép biến hình: HelloJava3Db 123
1.8 Khả năng và hoạt động 123
1.8.1 Dịch các nội dung 124
1.8.2 Khả năng 124
1.9 Thêm vào các hành vi animation 125
303 trang |
Chia sẻ: huong.duong | Lượt xem: 3186 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Lập trình đồ họa trên Java 2D và 3D, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
tượng này.
void setColor(int index, float color[])
void setColor(int index, byte color[])
void setColor(int index, Color* color)
Lập màu tương ứng với đỉnh với mỗi đỉnh được định nghĩa là một chỉ mục cho đối tượng này. void setColors(int index, float colors[])
void setColors(int index, byte colors[])
void setColors(int index, Color* colors[])
Lập các màu tương ứng với các đỉnh ,với mỗi đỉnh được định nghĩa là một chỉ mục cho đối tượng này.
void setNormal(int index, float normal[])
void setNormal(int index, Vector* normal)
Lập trực giao tương ứng với mỗi đỉnh tại vị trí chỉ mục được chỉ ra cho đối tượng này.
void setNormals(int index, float normals[])
void setNormals(int index, Vector* normals[])
Lập các trực giao tương ứng với các đỉnh tại vị trí chỉ mục được chỉ ra cho đối tượng này.
void setTextureCoordinate(int texCoordSet, int index, float texCoord[])
void setTextureCoordinate(int texCoordSet, int index, TexCoord* coordinate)
Lập texture coordinate ứng với mỗi đỉnh tại vị trí chỉ mục cho trước cho một tập texture coordinate của đối tượng.
GeometryArray Methods (partial list, continued)
void setTextureCoordinates(int texCoordSet, int index,
float texCoords[])
void setTextureCoordinates(int texCoordSet, int index,
TexCoord* texCoords[])
Lập các texture coordinate ứng với các đỉnh tại vị trí chỉ mục cho trước cho một tập texture coordinate của đối tượng.
void setInitialVertexIndex(int initialVertexIndex)
Lập chỉ mục cho đỉnh ban đầu với đối tượng GeometryArray. Cho phép một vài đỉnh có thể bỏ qua trong việc dựng hình, và các hoạt động khác.
void setValidVertexCount(int validVertexCount)
Lạp các giá trị tính toán đỉnh đúng cho đối tượng GeometryArray. Cho phép một vài dữ liệu đỉnh có thể bỏ qua khi dựng hình, chọn lọc và các hoạt động khác.
Đoạn mã 2-5 chỉ ra trường hợp sử dụng phương thức của GeometryArray để lưu giữ tạo độ và giá trị màu trong mảng LineArray. Đối tượng trục X chỉ gọi phương thức setCoordinate() để lưu trữ dữ liệu tọa độ. Đối tượng trục Y gọi cả 2 phương thức setColor() và setCoordinate() để nạp giá trị màu RGB và giá trị tọa độ. Đối tượng trục Z thì gọi 10 lần phương thức setCoordinate() cho mỗi đỉnh và gọi setColors() một lần để nạp cho cả 10 đỉnh với 1 phương thức.
// //////////////////////////////////////////
//
// create axis subgraph
//
public Axis() {
axisBG = new BranchGroup();
// create line for X axis
LineArray axisXLines = new LineArray(2, LineArray.COORDINATES);
axisBG.addChild(new Shape3D(axisXLines));
axisXLines.setCoordinate(0, new Point3f(-1.0f, 0.0f, 0.0f));
axisXLines.setCoordinate(1, new Point3f(1.0f, 0.0f, 0.0f));
Color3f red = new Color3f(1.0f, 0.0f, 0.0f);
Color3f green = new Color3f(0.0f, 1.0f, 0.0f);
Color3f blue = new Color3f(0.0f, 0.0f, 1.0f);
// create line for Y axis
LineArray axisYLines = new LineArray(2, LineArray.COORDINATES
| LineArray.COLOR_3);
axisBG.addChild(new Shape3D(axisYLines));
axisYLines.setCoordinate(0, new Point3f(0.0f, -1.0f, 0.0f));
axisYLines.setCoordinate(1, new Point3f(0.0f, 1.0f, 0.0f));
axisYLines.setColor(0, green);
axisYLines.setColor(1, blue);
// create line for Z axis
Point3f z1 = new Point3f(0.0f, 0.0f, -1.0f);
Point3f z2 = new Point3f(0.0f, 0.0f, 1.0f);
LineArray axisZLines = new LineArray(10, LineArray.COORDINATES
| LineArray.COLOR_3);
axisBG.addChild(new Shape3D(axisZLines));
axisZLines.setCoordinate(0, z1);
axisZLines.setCoordinate(1, z2);
axisZLines.setCoordinate(2, z2);
axisZLines.setCoordinate(3, new Point3f(0.1f, 0.1f, 0.9f));
axisZLines.setCoordinate(4, z2);
axisZLines.setCoordinate(5, new Point3f(-0.1f, 0.1f, 0.9f));
axisZLines.setCoordinate(6, z2);
axisZLines.setCoordinate(7, new Point3f(0.1f, -0.1f, 0.9f));
axisZLines.setCoordinate(8, z2);
axisZLines.setCoordinate(9, new Point3f(-0.1f, -0.1f, 0.9f));
Color3f colors[] = new Color3f[9];
colors[0] = new Color3f(0.0f, 1.0f, 1.0f);
for (int v = 0; v < 9; v++) {
colors[v] = red;
}
axisZLines.setColors(1, colors);
} // end of axis constructor
Màu mặc định cho các đỉnh của một đối tượng mảng GeometryArray là trắng, nếu cả COLOR_3 và COLOR_4 không được định nghĩa. Khi các đường hoặc đa giác đầy được dựng với các màu khác nhau tại mỗi đỉnh thì các màu sẽ mịn dần giữa các đỉnh sử dụng phép đánh bóng Gouraud.
Bước 3: Tạo đối tượng Shape3D tham chiếu đến đối tượng GeometryArray
Đoạn mã dưới đây chỉ ra cách làm thế nào để đối tượng Shape3D tham chiếu đến đối tượng GeometryArray. Đối tượng Shape3D được thêm vào một BranchGroup sẽ được thêm vào ở nơi nào đó trên đồ thị khung cảnh. (Shape3D là lớp con của Node, vì thế Shape3D có thể thêm vào thành con của một đồ thị khung cảnh )
Đồ thị khung cảnh được chỉ ra ở dưới đây:
2.5.2 Subclasses of GeometryArray
Như đã nói ở phần trên do GeometryArray là lớp trừu tượng là lớp cha của rất nhiều lớp con hữu dụng, chẳng hạn như LineArray. Hình 1-2 cho thấy cây thừa kế đối với lớp GeometryArray và các lớp con của nó. Lí do tồn tại của các lớp con này là làm sao để trình dựng hình của Java 3D có thể quyết định dựng đối với các đỉnh của các lớp đó.
Hình 2-13 chỉ ra một ví du về các lớp con của GeometryArray gồm: PointArray, LineArray, TriangleArray, và QuadArray (các lớp này không phải là lớp con của GeometryStripArray). Trong hình này, các tập bên trái nhất của các đỉnh chỉ ra 3 điểm đỉnh dựng thành 6 điểm, 3 đường, hoặc 2 tam giác. Hình thứ 4 chỉ ra 4 đỉnh định nghĩa một tứ giác. Chú ý rằng các định này không dùng chung: mỗi đường hoặc một đa giác đầy được dựng độc lập với nhau.
GeometryArray Subclass Constructors
Tạo một đối tượng rỗng với số đỉnh và định dạng đỉnh cho trước.
PointArray(int vertexCount, int vertexFormat)
LineArray(int vertexCount, int vertexFormat)
TriangleArray(int vertexCount, int vertexFormat)
QuadArray(int vertexCount, int vertexFormat)
Để tìm hiểu cách sử dụng hàm tạo và phương thức xem lại đoạn mã 2-4 và 2-5,2-6 sử dụng đối tượng LineArray. Nếu bạn đang dựng một hình tứ giác cẩn thận với các đỉnh có thể tạo thành hình lõm, tự cắt nhau hoặc không phẳng. Nếu xảy ra, chúng không thể dựng đúng được.
2.5.3 Subclasses of GeometryStripArray
Phần trước mô tả 4 lớp con của GeometryArray, không cho phép sử dụng lại các đỉnh, tuy nhiên có một vài trường hợp ta cần sử dụng lại các đỉnh, để cho kết quả dựng hình tốt hơn.
Lớp GeometryStripArray là lớp trừu tượng từ đó mỗi thực thể hình học cơ bản (để ghép tạo đường và bề mặt ) thừa kế. GeometryStripArray là lớp cha của LineStripArray, TriangleStripArray và TriangleFanArray. Ta có hình 2-14 chỉ ra một instance của một dạng các đỉnh được sử dụng lại.
Lớp GeometryStripArray có hàm tạo khác với lớp GeometryArray. Hàm tạo của nó có 3 tham số, một mảng cách đỉnh tính trên mỗi mảnh cho phép một đối tượng có thể duy trì nhiều mảnh. GeometryStripArray có 2 phương thức thường sử dụng đến là getNumStrips() và getStripVertexCounts().
GeometryStripArray Subclass Constructors
Tạo một đối tượng rỗng với giá trị các đỉnh và định dạng các đỉnh và một mảng tính toán các đỉnh qua các mảnh. Định dạng là một hay nhiều các bit cờ “OR” để mô tả cho mỗi dữ liệu đỉnh. Định dạng các cờ là giống nhau như đã định nghĩa trong lớp GeometryArray. Nhiều mảnh cùng một lúc cũng được hỗ trợ. Tổng các tính toán đỉnh cho tất cả các mảnh phải bằng với tổng số các đỉnh
LineStripArray(int vtxCount, int vertexFormat, int stripVertexCounts[])
TriangleStripArray(int vtxCount, int vertexFormat, int stripVertexCounts[])
TriangleFanArray(int vtxCount, int vertexFormat, int stripVertexCounts[])
Chú ý rằng Java 3D không hỗ trợ các hình cơ bản đầy với nhiều hơn 4 mặt. Người lập trình phải có trách nhiệm trong việc sử dụng kĩ thuật tách để tách hình phức tạp ra thành nhiều các đối tượng của Java 3D như mảng tam giác hoặc hình quạt.
Triangulator Class
Package: com.sun.j3d.utils.Geometry
Sử dụng để chuyển các đa giác hình học không có dạng tam giác về các tam giác để có thể dựng hình bằng Java 3D. Các đa giác phải là lồi, cùng nằm trên một mặt phẳng các cạnh không giao nhau.
Triangulator Constructor Summary
Triangulator()
Tạo một đối tượng tam giác.
Triangulator Method Summary
void triangulate(GeometryInfo ginfo)
Chương trình con này chuyển đối tượng GeometryInfo từ dạng cơ bản POLYGON_ARRAY thành dạng TRIANGLE_ARRAY sử dụng kĩ thuật tách đa giác
Tham số:
ginfo - com.sun.j3d.utils.Geometry.GeometryInfo to be triangulated.
Ví dụ về cách sử dụng: TRIANGLE_ARRAY
Triangulator tr = new Triangulator();
tr.triangulate(ginfo); // ginfo contains the Geometry
shape.setGeometry(ginfo.getGeometryArray()); // shape is a Shape3D
Yo-yo Code Demonstrates TriangleFanArray
Đối tượng Yoyo trong chương trình YoyoApp.java schỉ ra cách sử dụng đối tượng TriangleFanArray để mô hình hóa con yo-yo
Hình 2-15 chỉ 3 hình dựng của TriangleFanArray.
Trong đoạn mã 2-7, phương thức yoyoGeometry()tạo và trả về đối tượng TriangleFanArray mong muốn.
Dòng 15-18 tính toán tâm điểm cho 4 hình nón. Mỗi hình nón có 18 đỉnh được tính toán ở dòng 20-28. Dòng 30-32 tạo một đối tượng TriangleFanArray và dòng 34 là nơi để tính toán dữ liệu tọa độ (từ dòng 15-28) để lưu đối tượng
1. private Geometry yoyoGeometry() {
2.
3. TriangleFanArray tfa;
4. int N = 17;
5. int totalN = 4*(N+1);
6. Point3f coords[] = new Point3f[totalN];
7. int stripCounts[] = {N+1, N+1, N+1, N+1};
8. float r = 0.6f;
9. float w = 0.4f;
10. int n;
11. double a;
12. float x, y;
13.
14. // set the central points for four triangle fan strips
15. coords[0*(N+1)] = new Point3f(0.0f, 0.0f, w);
16. coords[1*(N+1)] = new Point3f(0.0f, 0.0f, 0.0f);
17. coords[2*(N+1)] = new Point3f(0.0f, 0.0f, 0.0f);
18. coords[3*(N+1)] = new Point3f(0.0f, 0.0f, -w);
19.
20. for (a = 0,n = 0; n < N; a = 2.0*Math.PI/(N-1) * ++n){
21. x = (float) (r * Math.cos(a));
22. y = (float) (r * Math.sin(a));
23.
24. coords[0*(N+1)+N-n] = new Point3f(x, y, w);
25. coords[1*(N+1)+n+1] = new Point3f(x, y, w);
26. coords[2*(N+1)+N-n] = new Point3f(x, y, -w);
27. coords[3*(N+1)+n+1] = new Point3f(x, y, -w);
28. }
29.
30. tfa = new TriangleFanArray (totalN,
31. TriangleFanArray.COORDINATES,
32. stripCounts);
33.
34. tfa.setCoordinates(0, coords);
35.
36. return tfa;
37.} // end of method yoyoGeometry in class Yoyo
Code Fragment 2-7 yoyoGeometry() Method Creates TriangleFanArray Object
Hình yo-yo trắng mới chỉ là điểm khởi đầu. Hình 2-16 chỉ ra một đối tượng tương tự nhưng màu đã được thay đổi ở mỗi đỉnh. Phương thức được yoyoGeometry()thay đổi. Dòng 23 qua 26, 36 tới 39, và dòng 46 chỉ định màu cho mỗi đỉnh.
1. private Geometry yoyoGeometry() {
2.
3. TriangleFanArray tfa;
4. int N = 17;
5. int totalN = 4*(N+1);
6. Point3f coords[] = new Point3f[totalN];
7. Color3f colors[] = new Color3f[totalN];
8. Color3f red = new Color3f(1.0f, 0.0f, 0.0f);
9. Color3f yellow = new Color3f(0.7f, 0.5f, 0.0f);
10. int stripCounts[] = {N+1, N+1, N+1, N+1};
11. float r = 0.6f;
12. float w = 0.4f;
13. int n;
14. double a;
15. float x, y;
16.
17. // set the central points for four triangle fan strips
18. coords[0*(N+1)] = new Point3f(0.0f, 0.0f, w);
19. coords[1*(N+1)] = new Point3f(0.0f, 0.0f, 0.0f);
20. coords[2*(N+1)] = new Point3f(0.0f, 0.0f, 0.0f);
21. coords[3*(N+1)] = new Point3f(0.0f, 0.0f, -w);
22.
23. colors[0*(N+1)] = red;
24. colors[1*(N+1)] = yellow;
25. colors[2*(N+1)] = yellow;
26. colors[3*(N+1)] = red;
27.
28. for(a = 0,n = 0; n < N; a = 2.0*Math.PI/(N-1) * ++n){
29. x = (float) (r * Math.cos(a));
30. y = (float) (r * Math.sin(a));
31. coords[0*(N+1)+n+1] = new Point3f(x, y, w);
32. coords[1*(N+1)+N-n] = new Point3f(x, y, w);
33. coords[2*(N+1)+n+1] = new Point3f(x, y, -w);
34. coords[3*(N+1)+N-n] = new Point3f(x, y, -w);
35.
36. colors[0*(N+1)+N-n] = red;
37. colors[1*(N+1)+n+1] = yellow;
38. colors[2*(N+1)+N-n] = yellow;
39. colors[3*(N+1)+n+1] = red;
40. }
41. tfa = new TriangleFanArray (totalN,
42. TriangleFanArray.COORDINATES|TriangleFanArray.COLOR_3,
43. stripCounts);
44.
45. tfa.setCoordinates(0, coords);
46. tfa.setColors(0,colors);
47.
48. return tfa;
49. } // end of method yoyoGeometry in class Yoyo
Code Fragment 2-8 Modified yoyoGeometry() Method with Added Colors
2.5.4 Subclasses of IndexedGeometryArray
Các phần trước mô tả các lớp con của GeometryArray, cho thấy chỉ lớp GeometryStripArray có thêm quyền hạn sử dụng lại các đỉnh. Ví dụ để định nghĩa một hình lập phương mỗi đỉnh trong 8 đình của nó phải được sử dụng bởi 3 hình vuông. Trong trường hợp xấu nhất chúng ta phải định nghĩa 24 đỉnh mặc dù chỉ 8 đỉnh là đủ.
Đối tượng IndexedGeometryArray cung cấp một cấp bậc khác sao cho có thể tránh việc sử dụng thừa. Với những mảng này cũng chứa tạo độ, màu sắc, bề mặt thường và tạo độ bề mặt.
Tuy nhiên đối tượng IndexedGeometryArray cũng cần thêm các mảng phụ gọi là mảng chỉ số chứa các chỉ mục đến mảng dữ liệu. Mảng chỉ mục này có nhiều tham chiếu đến các đỉnh tương tự trong cùng một mảng dữ liệu, từ đó cho phép sử dụng lại hiệu quả rõ ràng. Chúng ta có thể xen ví dụ dưới đây.
Các lớp con của IndexedGeometryArray song song với các lớp con của lớp GeometryArray. Cây thừa kế được vẽ dưới hình 2-18
Hàm tạo cho IndexedGeometryArray, IndexedGeometryStripArray cùng các lớp con của chúng dưới đây.
IndexedGeometryArray and Subclasses Constructors
Tạo một đối tượng rỗng với số đỉnh và định dạng đỉnh cho trước và số các chỉ mục trong mảng này.
IndexedGeometryArray(int vertexCount, int vertexFormat, int indexCount)
IndexedPointArray(int vertexCount, int vertexFormat, int indexCount)
IndexedLineArray(int vertexCount, int vertexFormat, int indexCount)
IndexedTriangleArray(int vertexCount, int vertexFormat, int indexCount)
IndexedQuadArray(int vertexCount, int vertexFormat, int indexCount)
IndexedGeometryStripArray and Subclasses Constructors
Tạo một đối tượng rỗng với số đỉnh và định dạng đỉnh cho trước và số các chỉ mục trong mảng này và một mảng các tổng số các đỉnh mỗi mảnh.
IndexedGeometryStripArray(int vc, int vf, int ic, int stripVertexCounts[])
IndexedLineStripArray(int vc, int vf, int ic, int stripVertexCounts[])
IndexedTriangleStripArray(int vc, int vf, int ic, int stripVertexCounts[])
IndexedTriangleFanArray(int vc, int vf, int ic, int stripVertexCounts[])
Các phương thức của chúng cho đưới dây:
IndexedGeometryArray Methods (partial list)
void setCoordinateIndex(int index, int coordinateIndex)
Tạo các chỉ mục tọa độ tương ứng với các đỉnh tại vị trí chỉ mục cho đối tượng
void setCoordinateIndices(int index, int coordinateIndices[])
Tạo các chỉ mục các tọa độ tương ứng với các đỉnh tại vị trí chỉ mục cho đối tượng
void setColorIndex(int index, int colorIndex)
Lập chỉ mục màu tương ứng với đỉnh tại vị trí chỉ mục đã cho với đối tượng.
void setColorIndices(int index, int colorIndices[])
Lập các chỉ mục màu tương ứng với các đỉnh tại vị trí chỉ mục đã cho với đối tượng.
void setNormalIndex(int index, int normalIndex)
Lập chỉ mục bình thường tương ứng với đỉnh tại chỉ mục định trước cho đối tượng.
void setNormalIndices(int index, int normalIndices[])
Lập các chỉ mục bình thường tương ứng với các đỉnh tại chỉ mục định trước cho đối tượng.
void setTextureCoordinateIndex(int texCoordSet, int index,
int texCoordIndex)
Lập chỉ mục toạ độ tương ứng với đỉnh tại chỉ mục định trước cho đối tượng.
void setTextureCoordinateIndices(int texCoordSet, int index,
int texCoordIndices[])
Lập các chỉ mục toạ độ tương ứng với các đỉnh tại chỉ mục định trước cho đối tượng.
2.5.5 Axis.java is an Example of IndexedGeometryArray
Ví dụ Axis về IndexedGeometryArray ta có định nghĩa 18 đỉnh và 30 chỉ mục cho 15 đường. Như vậy có 5 đường cho mỗi trục.
2.6 Appearance and Attributes
Đối tượng Shape3D có thể tham chiếu đến cả đối tượng Geometry và Apperance. Như đã thảo nói ở phía trên trong phần 2.5, đối tượng Geometry chỉ ra thông tin của mối đỉnh với một đốt tượng quan sát. Thông tin mỗi đỉnh này có thể chỉ định ra màu của đối tượng. Dữ liệu trong đối tượng Geometry thường không đủ để mô tả bề ngoài của một bối tượng. Trong trường hợp đó rất cần thiết đối tượng Apperance.
Một đối tượng Appearance không chứa dữ liệu mô tả đối tượng quan sát mà nó biết nơi nào có dữ liệu đó, do đó cách làm của nó là tham chiếu đến một vài đối tượng khác như lớp con của NodeComponent .
Một đối tượng Appearance có thể tham chiếu đến thuộc tính một vài đối tượng lớp khác như:
PointAttributes
LineAttributes
PolygonAttributes
ColoringAttributes
TransparencyAttributes
RenderingAttributes
Material
TextureAttributes
Texture
TexCoordGeneration
Sáu thuộc tính được đề cập đến trong tài liệu này còn lại dành cho chương 6 và chương 7.
Một đối tượng Appearance với các thuộc tính của đối tượng khác mà nó tham chiếu đến gọi là một gói giao diện. Để tham chiếu đến nó dựa trên phương thức với một cái tên chính xác. Ví dụ như tham chiếu đến đối tượng ColoringAttributes nó sử dụng phương thức Appearance.setColoringAttributes().
Trên đồ thị khung cảnh
2.6.1 Appearance NodeComponent
Appearance Constructor
Hàm tạo này tạo đối tượng Appearance với mọi thành phần chiếu nhận giá trị null. Các giá trị mặc định có thể đoán được: điểm và đoạn thẳng được vẽ với kích thước và độ dài 1 pixel và không có có khử răng cưa, màu mặc định là màu trắng, khả năng xuyên qua vô hiệu hóa.
Appearance()
2.6.2 Sharing NodeComponent Objects
Việc tham chiếu đến một vài đối tượng là hợp lệ và cũng cần thiết vì thế nên chia sẻ cùng các đối tượng NodeComponent. Ví dụ trong hình 2-21 2 đối tượng Shape3D chia sẻ cùng thành phần LineAttributes.
Việc chia sẽ này giúp cho việc dựng hình nhanh hơn, hiệu quả càng cao.
Tuy nhiên cần chú ý rằng một node không được có nhiều hơn một cha từ đó NodeComponent có thể chia sẻ hay tham chiếu đến bởi nhiều đối tượng khác.
2.6.3 Attribute Classes
PointAttributes
Đối tượng PointAttributes quản lí việc mỗi điểm cơ bản được dựng hình như thế nào. Mặc định một đỉnh được dựng như một điểm, bạn có thể dùng setPointSize() để làm cho điểm đó to ra tuy nhiên mặc định một điểm to sẽ trông như một hình vuông, trừ phi bạn dùng setPointAntialiasingEnable(). Lúc đó điểm vuông được làm tròn đi.
PointAttributes Constructors
PointAttributes()
Tạo một đối tượng thành phần và mô tả kích thước 1 pixel không dùng khử răng cưa
PointAttributes(float pointSize, boolean state)
Tạo một đối tượng thành phần và mô tả kích thước 1 pixel dùng khử răng cưa
PointAttributes Methods
void setPointSize(float pointSize)
Mô tả kích thước pixel của các điểm
void setPointAntialiasingEnable(boolean state)
Thiết lập hoặc bỏ thiết lập chống răng cưa. Thường làm nếu pointSize >= 1 pixel.
LineAttributes
Đối tượng này thay đổi cách dựng các đường cơ bản theo 3 cách. Mặc định đường được vẽ là nét liền, với độ rộng 1pixle không chống răng cửa. Bạn có thể thay đổi điều này bằng cách sử dụng các phương thức setLinePattern(), setLineWidth(), và setLineAntialiasingEnable().
Mẫu đường thẳng do người dùng tự định nghĩa
Một mẫu thường dược định nghĩa bằng một mặt nạ mẫu và một thành phần quy mô.
Một giá trị 16 bit định nghĩa một mặt nạ mẫu. Mỗi bit trong 16 bit giá trị định nghĩa khi nào 1 pixel trong mẫu được bật hay tắt (1/0). Sau khi cả 16 mẫu đều được sử dụng, thì mẫu được lặp lại. Bit 0 tương ứng với pixel đầu tiên trong mẫu.
Ví dụ một mặt nạ của 0x00ff (0b0000000011111111) định nghĩa 8 pixel mở sau đó là 8 pixel đóng.
Nhớ rằng,bit phóng đại bé nhất được sử dụng đầu tiên khi vẽ, nên mẫu bit được đọc từ phải sang trái. Mặt nạ mẫu giá trị 0x0101 định nghĩa một mẫu lặp của một pixel mở và 7pixel tắt. Mẫu này được lặp lại nhiều lần tùy theo yêu cầu, mẫu khởi động lại trước mỗi đường mới của một mảnh.
Các mẫu có thể mở rộng đến 240 pixel sử dụng nhân tố quy mô. Ví dụ như quy mô của 3 x với một mặt nạ mẫu 0x001f tương đương với sản sinh ra mẫu với 15 pixel mở theo bởi 33 pixel đóng. Khoảng cách đúng là [1,15],giá trị bên ngoài khoảng này là không chấp nhận được.
LineAttributes Constructors
LineAttributes()
Tạo một đối tượng thành phần mô tả độ rộng 1 pixel, một đường thẳng liền nét không khử răng cưa.
LineAttributes(float pointSize, int linePattern, boolean state)
Tạo một đối tượng thành phần mô tả độ rộng 1 pixel cho một đường thẳng, mẫu dùng để vẽ, có khử răng cưa.
LineAttributes Methods
void setLineWidth(float lineWidth)
Mô tả độ rộng pixel cho đường thẳng
void setLinePattern(int linePattern)
linePattern là một trong số các hằng sau:
PATTERN_SOLID (the default),
PATTERN_DASH, PATTERN_DOT, PATTERN_DASH_DOT, or PATTERN_USER_DEFINED.
Mô tả làm sao một pixel của một đường được điền vào.
void setLineAntialiasingEnable(boolean state)
Bỏ hay có chống răng cưa với đường thẳng
void setPatternMask(int mask)
Lập một mặt nạ mẫu với một giá trị đặc biệt
void setPatternScaleFactor(int scaleFactor)
Sets the line pattern scale factor to the specified value.
Line Attributes Line Patterns
PATTERN_SOLID solid lines (no pattern). This is the default.
PATTERN_DASH dashed lines; ideally, a repeating pattern of 8 pixels on and 8 pixels off.
PATTERN_DOT dotted lines; ideally, a repeating pattern of 1 pixel on and 7 pixels off.
PATTERN_DASH_DOT dashed-dotted lines; ideally, a repeating pattern of 7 pixels on, 4 pixels
off, 1 pixel on, and 4 pixels off.
PATTERN_USER_DEFINED lines with a user-defined line pattern. See "User-defined Line Patterns,"above.
PolygonAttributes
PolygonAttributes chi phối việc dựng hình của các thành phần cơ bản đa giác theo 3 cách: đa giác bị phân tách như thế nào, nếu nó được chọn lọc và khi nào thì độ sâu bù được chấp nhận. Mặc định các đa giác đều là đa giác lồi tuy nhiên khi đa giác bị tách thì đa giác được vẽ lại thành các khung (đường) hoặc chỉ các điểm tại các đỉnh. Phương thức setCullFace() dùng để loại bỏ các đa giác đã được dựng. Nếu phương thức này thiết lập hoặc CULL_FRONT hoặc CULL_BACK thì một nửa số đa giác không được dựng.
Tùy theo sự hiệu quả của hệ thống dựng hình mà các đỉnh được dựng cả là các dây khung và các đa giác lồi luôn được phân tách với giá trị độ sâu chính xác. Kết quả là các đa giác và các dây khung có thể được dựng ở độ sâu khác nhau, gây ra hiện tượng đường khâu. Hiện tương stitching này là do độ sâu khác nhau nên các dây khung xuất hiện lúc ẩn lúc hiện trên đa giác. Với 2 thuộc tính PolygonOffset và PolygonOffsetFactor về giá trị độ sâu cho phép đa giác lồi có thể hướng khửu tay về phía khung hình ảnh. setBackFaceNormalFlip()được sử dụng để dựng một đa giác lồi sáng với cả 2 mặt của đa giác đều mờ đi.
PolygonAttributes Constructors
PolygonAttributes()
Tạo đối tượng thành phần với giá trị mặc định của đa giác lồi không có cắt bề mặt không có rìa đa giác.
PolygonAttributes(int polygonMode, int cullFace, float polygonOffset)
Tạo đối tượng thành phần với giá trị cho trước của giác lồi
PolygonAttributes(int polygonMode, int cullFace, float polygonOffset,
boolean backFaceNormalFlip)
Tạo đối tượng thành phần giống như các hàm tạo phía trước nhưng cũng cho phép chỉ ra mặt phía trước và phía sau của đa giác như thế nào
PolygonAttributes(int polygonMode, int cullFace, float polygonOffset, boolean backFaceNormalFlip, float polygonOffsetFactor)
Tạo đối tượng PolygonAttributes với giá trị cho trước.
PolygonAttributes Methods
void setCullFace(int cullFace)
cullFace là CULL_FRONT, CULL_BACK, or CULL_NONE. Cull (không dựng) trước mặt và mặt sau của các đa giác hoặc không tách đa giác nào.
void setPolygonMode(int polygonMode)
polygonMode là: POLYGON_POINT, POLYGON_LINE, or
POLYGON_FILL. Dựng polygons trên points, lines, or filled polygons (mặc định).
void setPolygonOffset(float polygonOffset)
polygonOffset là screen-space offset thêm vào để hiệu chỉnh giá trị độ sâu của polygon primitives.
void setPolygonOffsetFactor(float polygonOffsetFactor)
Lập polygon offset factor với giá trị cho trước.
void setBackFaceNormalFlip(boolean backFaceNormalFlip)
trong đó backFaceNormalFlip xác định khi nào đỉnh bình thường hoặc mặt sau của đa giác cần khuất sáng. Khi cờ này được lập giá trị true mặt sau bỏ lựa chọn mặt sau.
ColoringAttributes
Thuộc tính ColoringAttributes điều khiển chuyện tô màu. Phương thức setColor() lập một màu bên trong trong đó tùy trường hợp mà để màu đó vào. Thêm vao đó setShadeModel() xác định khi nào có khi cần thêm ngang một màu vào.
ColoringAttributes Constructors
ColoringAttributes()
Tạo đối tượng thành phần sử sụng màu trắng cho màu bên trong và SHADE_GOURAUD là mô hình đánh bóng.
ColoringAttributes(Color3f color, int shadeModel)
ColoringAttributes(float red, float green, float blue, int shadeModel)
shadeModel là một trong SHADE_GOURAUD, SHADE_FLAT, FASTEST, or NICEST.
(trong hầu hết trường hợp, FASTEST là SHADE_FLAT, và NICEST là SHADE_GOURAUD.)
ColoringAttributes Methods
void setColor(Color3f color)
void setColor(float red, float green, float blue)
cả 2 phương thức đều định nghĩa màu bên trong
void setShadeModel(int shadeModel)
shadeModel là một trong các hằng: SHADE_GOURAUD, SHADE_FLAT, FASTEST,
or NICEST.
TransparencyAtt
Các file đính kèm theo tài liệu này:
- DAN011.doc