Lập trình đồ họa trên nền tảng Java 2D

MỤC LỤC

Transforms

Tất cả các phép chuyển tọa độ,bao gồm các phép chuyển từ không gian người sử dụng đến không gian của thiết bị,đều được biểu diễn bởi đối tượng kiểu AffineTransform .AffineTransform định nghĩa các luật cho những thao tác trên các hệ tọa độ bằng các ma trận(các phép biến đổi ảnh bằng các bộ lọc). Cũng có thể thêm đối tượng AffineTransform cho các dạng đồ họa bằng các phép xoay ,lấy tỉ lệ ,chuyển đổi hoặc cắt tọa độ cho một mặt hình học ,văn bản hay ảnh khi chúng được tô trát.Các phép biến đổi được thêm vào này sẽ được ứng dụng cho các đối tượng đồ họa được tô trát trong trường hợp đó phép bién đổi này được thực hiện khi chuyển từ tọa độ không gian người sử dụng sang không gian của thiết bị.

Fonts

Nhưng điều này lại khác với fần mềm JDK 1.1 ,các font được mô tả bằng các tên lôgíc mà ánh xạ trên các dạng font khác nhau fụ thuộc liệu các dạng font đó có sắn trong môi trường đang xét không.Như để tương thích cho điều đó ; the Java 2D API hỗ trợ việc xác định các font bằng tên lôgíc cũng như bằng tên dạng font. Các dạng của văn bản được lưu riêng biệt một cách lôgíc với sự sắp xếp các văn bản.Các đối tượng Font được sử dụng để mô tả các hình dạng hiển thị của font, và thông tin sắp xếp được lưu trong đối tượng TextLayout và TextAttributeSet.

Images

Hay nói cách khác ,một nhóm các glyphs với các kiểu riêng biệt tạo nên một dạng font,nhóm các dạng font tao nên môt họ font ,họ các font tạo nên một tập font và tập này có sẵn trong một đối tượng GraphicsEnvironment cụ thể nào đó. Việc chia không gian màu sắc thành các chế độ màu sẽ tạo nên sự linh hoạt hơn trong việc biểu diễn và chuyển đổi từ phép biểu diễn màu này sang một phếp biểu diẽn màu khác.

Composites

Và Java 2D™ API là một kiến trúc chính vì vậy mà các ứng dụng của nó có tính độc lập về môi trường.

Backward Compatibility

Bây giờ mở rộng các lớp Rectangle2D mới và triển khai cả hai interface Shape và Serializable. Các Applet được viết cho phần mềm JDK 1.1 không truy cập được các lớp mới và các phần triển khai của các interface,nhưng điều này không ảnh hưởng bởi vì lớp Rectangle vẫn bao gồm các phương thức và các thành phần có trong các phiên bản trước.

Platform independence

Hai lớp cha được thêm vào phân cấp của lớp Rectangle là RectangularShape và Rectangle2D.

The Java 2D ™ API Packages

Các lớp chế độ màu sắc này vẫn tồn tại trong package java.awt.image package cho sự tương thích .Để đảm bảo tính thống nhất,các lớp cho chế độ màu mới cũng có trong package java.awt.image. Graphics2D mở rộng java.awt.Graphics để tạo ra điều khiển tinh vi hơn về biểu diễn các hình ,văn bản và ảnh .Quá trình tô trát Java 2D™ được điều khiển thông qua đối tượng Graphics2D và các thuộc tính trạng thái của nó.

Các lớp và giao diện

Các thuộc tính tạng thái Graphics2D , như là các kiểu đường thẳng và các phép biến đổi,được áp dụng cho các đối tượng đồ họa khi chúng được tô trát. Để tô trát văn bản ,hình và ảnh,cần thiết lập Graphics2D context và sau đó gọi một trong các phương thức tô trát Graphics2D như draw hay fill.

Rendering Concepts

Rendering Process

Tạo bóng (Rendering) văn bản tương đương với việc tạo bóng các đối tượng thuộc kiểu Shape, khi đó văn bản được tạo bóng với từng glyph và mỗi glyph là một đối tượng thuộc kiểu Shape. Thông tin về màu sắc lấy từ chính ảnh đó và nguồn alpha(alpha channel) được sử dụng kết hợp với thuộc tính hiện tại của Composite khi các điểm ảnh được hợp trên bề mặt tạo bóng.

Controlling Rendering Quality

Nếu đối tượng Shape được taọ nét ,đối tượng Stroke quy vào ngữ cảnh Graphics2D được sử dụng để tạo nên một đối tượng Shape mới bao quanh những đường nét đó. Tọa độ của đường thuộc đối tượng Shape được biến đổi từ không gian người sử dụng sang không gian của thiết bị theo các thuộc tính biến đổi trong ngữ cảng đồ họa Graphics2D.

Kĩ thuật làm trơn(Antialiasing)

Stroke Attributes

Tạo nét một đối tượng thuộc kiểu Shape như đối tượng GeneralPath tương đươnng với việc sử dụng một bút lôgíc theo các đoạn của đối tượng GeneralPath. Như ví du,ảnh đầu tiên trong hình 2-3 sử dụng miter join-style,và hình thứ hai sử dụng kiểu round join-style, a round endcap style, and a dashing pattern.

Fill Attributes

Phương thức createContext method is passed the bounding boxes of thegraphics object being filled in user space and in device space,đối tượng ColorModel là nơi để tạo các màu sắc,và thực hiện quá trình chuyển đổi để ánh xạ từ không gian người sử dụng vào không gian của thiết bị. Thông tin này passed to the next stage in the rendering pipeline, mà vẽ các màu đã được tạo bằng cách sử dụng đối tựợng Composite hiện thời.

Clipping Paths

Đối tượng PaintContext này sẽ lưu thông tin ngữ cảnh về thao tác tạo bóng hiện thời và những thông tin cần thiết để tạo ra các màu. Phương thức getRaster sau đó được gọi lặp lại nhiều lần để nhận giá trị của đối tựợng Raster mà bao gồm dữ liệu màu thật cho mỗi phiên.

Transformations

Nó luôn biến các đường thẳng thành các đường thẳng và các đường thẳng song song thành các đường thẳng song song,tuy nhiên khoảng cách giữa các điểm và các góc của các đường thẳng không song song có thể thay đổi. Khi một phép biến đổi được kết nối với một phép biến đổi đang tồn tại như với AffineTransform.concatenate, thì phép biến đổi cuối cùng được xác định là phép biến đổi đầu tiên được áp dụng.

Composite Attributes

,giá trị alpha thêm vào này sẽ làm tăng giá trị trong suốt của bất kì đối tượng đồ họa nào khi chúng được tạo bóng - giá trị alpha của mỗi đối tượng đồ họa được nhân lên bởi giá trị alpha của đối tượng AlphaComposite. Thông tin này đựoc gọi là kênh alpha( alpha channel,) ,nó được sử dụng kêts hợp với đối tượng Composite trong ngữ cảnh của Graphics2D để pha trộn màu của ảnh đó các đồ họa đang tồn tại.

Thiết lập Graphics2Context

    Thông tin này đựoc gọi là kênh alpha( alpha channel,) ,nó được sử dụng kêts hợp với đối tượng Composite trong ngữ cảnh của Graphics2D để pha trộn màu của ảnh đó các đồ họa đang tồn tại. pattern),để làm thế nào các đoạn thẳng được kết hợp với nhau. Luôn gọi phương thức getTransform trong đối tượng Graphics2D trước khi thêm vào một phép biến đổi cho ngữ cảnh đồ họa bởi vì ngữ cảnh đồ họa có thể đã tồn tại một phép biến đổi cho một lí do khác ,định vị Swing và các thành phần trong một cửa sổ.

    Rendering Graphics Primitives

      Trong ví dụ sau,đối tượng GeneralPath được sử dụng để định nghĩa một ngôi sao và một đối tượng BasicStroke được thêm vào ngữ cảnh Graphics2D để định nghĩa cho các cạnh của ngôi sao với các thuộc tính join. Khi một đối tượng Shape được tô, thì phần bị giới hạn bởi đương bao của đối tượng sẽ được tạo bóng với ngữ cảnh Graphics2D của thuộc tính Paint attribute—như Color, TexturePaint, or GradientPaint.

      Defining Custom Composition Rules

      Java 2D™ API cung cấp một số lớp để định nghĩa các đối tượng geometric (hình học),chẳng hạn như điểm,đường thẳng,đường cong,hình chữ nhật.Những lớp hình học mới đó là một phần của gói java.awt.geom.Để có thể tương thích với các phiên bản cũ,các lớp geometry có chứa trong các phiên bản trước đó của bộ JDK software,như rectangle,point và polygon,được chứa trong gói java.awt. Các đối tượng hình học trong Java 2D API như GenneralPath,Arc2D và Rectangle2D cho phép thực thi việc tạo giao diện bệ mặt được định nghĩa trong gói java.awt.Hình dáng cụ thể cung cấp cho ta một phương thức chung cho việc miêu tả và kiểm tra đường dẫn của các đối tượng hình học.Một giao diện mới Pathlterator,cung cấp các phương thức định nghĩa việc khôi phục các phần tử từ một đối tượng hình học.

      Giao diện và lớp

      Miêu tả việc định nghĩa đường e-lip bằng các hình chữ nhật giớI hạn.Cụng cụ để chỉ rừ cỏc đường cong elip vớI độ chính xác float và double: Ellipse2D.Float và Ellipse2D.Double. Miêu tả một đoạn thẳng trong không gian tọa độ (x,y) .Được thưc thi để xác định các đường thẳng với độ chính xác float và double:: Line2D.Float và Line2D.Double.

      Các khái niệm hình học

        Rectangle2D, một thể hiện của Rectangle.Cung cấp một độ chính xác cao hơn trong việc miêu tả shape’s bounding box. • Một hình chữ nhật cụ thể nằm hoàn toàn bên trong một bao đóng của hình thể.

        Combining Areas to Create New Shapes

        Bạn có thể sử dụng các phép biến đổi và các công cụ drawing của Java 2D™ API với văn bản.Hơn nữa, Java 2D™ API còn cung cấp các lớp liên quan tới văn bản hỗ trợ các điều khiển font và các cách bố trí văn bản phức tạp.Nó còn bao gồm cả lớp Font và lớp TextLayout. Chương này tập chung vào khả năng hỗ trợ các kiểu font và các cách bố trí văn bản(text layout) bằng việc sử dụng các giao diện và các lớp trong java.awt và java.awt.font.

        Giao diện và lớp

        Để có thêm thông tin về phân tích văn bản,bạn tham khảo thêm văn bản hướng dẫn về java.text và theo dừi phần “Writing Global Programs” trong bộ Java Tutorial. LineMetrics Cung cấp khả năng truy cập đến các thước đo font cần thiết để hiển thị các kí tự trên một hàng và hiển thị tập các hàng đó.Các thước đo bao gồm phần nhô lên,phần phía dưới,phần mũ,chiều cao và thông tin đường cơ bản(ascent, descent, leading, height, and baseline information).

        Các khái niệm về Font

        • Descent là khoảng cách từ đường baseline đến đường descender.Điểm thấp nhất của hầu hết các kí tự sẽ nằm bên trong descent,nhưng có một số kí tự có thể mở rộng về phía dưới của đường descender. Bạn có thể truy xuất những phép đo các line bằng việc sử dụng các phương thức getAscent, getDescent, và getLeading .Bạn cũng có thể truy xuất thông tin vê weight, baseline và underline của Font thông qua LineMetrics.

        Các khái niệm về Text Layout

          Trừ khi bạn làm việc với font đơn cách,các kí tự khác nhau trong kiểu font có chiều rộng khác nhau.Điều này có nghĩa tất cả các vị trí và kích thước của các văn bản phải được tính toán một cách chính xác với các kí tự được sử dụng.Ví dụ, một cột các chữ số được căn lề phải được hiển thị trong kiêu font cân xứng,bạn không thể dễ dàng sử dụng các không gian mở rộng cho vị trí của các văn bản.Đẻ căn lề các cột một cách đúng đắn,bạn cần phải biết chính xác chiều rộng của mỗi số mà bạn có thể điều chỉnh sao cho phù hợp. Tất cả các trình biên soạn văn bản đều cho phép người sử dụng di chuyển dấu caret với các phím mũi tên.Người sử dụng mong muốn dấu caret sẽ di chuyển theo hướng của các phím mũi tên đước ấn.Từ trái qua phải của đoạn text,việc di chuyển các khoảng trống thêm vào rất đơn giản:Phím mũi tên phải làm tăng khoảng trống được thêm vào bằng còn phím mũi tên trái làm giảm đi.Trong các văn bản hai chiều hoặc các văn bản có nhiều chữ ghép,cách làm này có thể khiến dấu caret nhẩy qua các glyph theo hướng của đường biên và di chuyển trong theo hướng ngược lại.

          Hình 4-5 Bidirectional Text
          Hình 4-5 Bidirectional Text

          Hiển thị dấu nhắc kép

          • Các giao diện và các lớp

            Bạn cũng có thể sử dụng lớp TextLayout để xác định kết quả của việc thêm vào các khoảng trống khi người sử dụng ấn các phím mũi tên trái hoặc phải.Dựa vào đối tượng TextHitinfo,nó cho ta biết vị trí hiện tại của khoảng trống thêm vào,phương thức getNextRightHit trả về kiểu đối tượng TextHitinfo mà nó cho biết chính xác vị trí của khoảng trống thêm vào khi phím mũi tên phải được nhấn.Còn phương thức getNextLeftHit cho ta thông tin như vậy khi phím mũi tên trái được nhấn. Để làm được điều này,bạn không phải làm trực tiếp bằng việc tạo ra nhiều đối tượng TextLayout mà bạn hiển thị mỗi dòng của văn bản-phương thức LineBreakMeasure sẽ làm điều đó cho bạn.Các kiểu văn bản hai chiều không thể thực hiện điều này một cách chính xác trừ khi tất cả văn bản trong một đoạn đã có sẵn.Phương thức LineBreakMeasure đóng gói toàn bộ thông tin về ngữ cảnh để tạo ra các đối tượng TextLayout chính xác.

            Color Model Classes

            Immediate Mode imaging Concepts

              Lưu trữ tập hợp tổ chức dữ liệu ảnh bởi các dải (bands), và một điểm được trang bị mọt dữ liệu mẫu từ vị trí mẫu với mảng đơn chứa tất cả các điểm, và các dải bao gồm tập các mẫu cùng chỉ số vị trí trong mỗi điểm. Các nguyên tố - Primaries: Các thành viên phân biệt của một giá trị màu trong một model màu xác định, ví dụ model RGB dạng các giá trị màu từ các nguyên tố red, green, và blue.

              Using Bufferedimages

                Bằng việc tạo một image mà không gian màu của nó, sâu, và bố trí các điểm chính xác với cửa sổ trong đó bạn đang vẽ, image có thể được đưa tới (blitted) thiết bị đồ hoạ một cách hiệu quả. Trong hình 5-3, một kênh alpha được dùng để phân biệt các vùng được vẽ và không được vẽ, cho phép một hình dạng bất quy tắc xuất hiện qua các hình mà bạn đã vẽ (trong trường hợp này, một. hình chữ nhật bóng).

                Hình 5-3 Using an Offscreen Buffer
                Hình 5-3 Using an Offscreen Buffer

                Managing and Manipulating Rasters

                  Cùng với các phương thức đó, Cũng có thể truy cập dữ bộ đệm và model mẫu qua các biến thể nghiệm (instance variables) của lớp Raster. Raster liên kết với một Bufferedimage thực ra là một WritableRaster vì cung cấp truy cập đầy đủ để xử lý dữ liệu điểm của nó.

                  Image Data and DataBuffers

                  Các phương thức Raster.getPixel cho phép lấy về một điểm riêng biệt, nó trả về như là một mẫu riêng biệt trong một mảng. Các phương thức Raster.getDataElements trả về một phần tử thực thi cụ thể của diễn dữ liệu ảnh không thể hiện từ DataBuffer.

                  Extracting Pixel Data from a SampleModel

                  • PixelinterleavedSampleModel— Được dùng để extract các điểm từ các image chứa mỗi sample trong một phần tử riêng vói các điểm được lưu trong một dãy tuân tự (sequence) của các phần tử dữ liệu. • MultiPixelPackedSampleModel— Được dùng để extract các điểm từ các iamge đơn band chứa nhiều mẫu một các điểm trong một phần tử dữ liệu( used to extract pixels from single banded images that store multiple one-sample pixels in one data element ).

                  ColorModels and Color Data

                    • BandedSampleModel— Được dùng để extract các điểm từ các image chứa mỗi mẫu trong một phần tử dữ liệu riêng với các band chứa trong một dãy các phần tử dữ liệu. • SinglePixelPackedSampleModel—used to extract samples from images that store sample data for a single pixel in one data array element in the first bank of a DataBuffer.

                    Các lớp

                    Vẽ ảnh màu là một trong những thành phần nền tảng của các hệ thống đồ họa và nó luôn là nguồn gốc của sự phức tạp trong những ô hình tạo ảnh.Thư viện Java 2D™ API cung cấp. ColorModel đựoc hệ tiêu biểu với một image hoặc một Bộ đệm hình ảnh(Bufferimage) và cung cấp thông tin cần thiêt thíc hợp để biểu diễn các gía trị đỉêm.

                    Những định nghĩa về mầu sắc

                      Các phương thức này bổ trợ chuyển đổi giữa hai không gian màu bất kỳ với mật độ và cấp độ cao, với một Color một lúc.Tuy nhiên cũng hi vọng rằng cài đặt Java 2D API se bổ trợ cho chuyển đổi với hiệu năng cao dựa trên hệ thông quản lý màu, thao tác trên toàn ảnh.( Xem ColorConvertOp trong imaging. Các đối tượng iCC_ColorSpace có thể được khởi tạo từ các iCC_Profile.(Có một số giới hạn – không phải tất cả các iCC Profile là thích hợp cho việc định nghĩa một iCC_ColorSpace)iCC_Profile có vài lớp con tương ứng với các loại không gian màu như iCC_ProfileRGB và iCC_ProfileGray.

                      Hình   6-2 biểu diễn cùng quá trình sử dụng CiEXYZ như là không gian màu chuyển đổi. Khi CiEXYZ được sử dụng, màu được chuyển qua một cách đứng đắn.
                      Hình 6-2 biểu diễn cùng quá trình sử dụng CiEXYZ như là không gian màu chuyển đổi. Khi CiEXYZ được sử dụng, màu được chuyển qua một cách đứng đắn.

                      Các giao diện và các lớp Interface Description

                        Hệ tọa độ của ngữ cảnh đồ hoạ được truyền để in được fixed với trang : gốc toạ độ của hệ thống là góc trái trên của trang, X tăng theo chiều phải sang trái, Y theo chiều từ trên xưống dưới, với đơn vì là 1/72 inch. Sự xác định của vùng in không thay đổi theo toạ độ hệ thống, nó được cung cấp sao cho nội dung của trang có thể được đẩy ra sao cho chúng không thể mở rông vào trong vung mà máy in không thể in.

                        Printing with Printables Cung cấp bổ hỗ trợ in cơ bản

                          Ví dụ, để chắc chắn rằng cùng đầu ra được sinh ra mỗi lần hệ thống in yêu cầu các trang cụ thể của một file văn bản, page painter có thể lưu trữ và sử dụng lại các con trỏ file cho mỗi trang hoặc chứa dữ trang thực tế. Ví dụ sau, một Book được dùng để tạo lại ví duj in đơn giản đầu tiên( Do trường hợp này qúa đơn giản, có rất it lợi ích trong việc dùng một Pageable job thay cho một Printable job, nhưng nó minh hoạ cơ bản cách cùng một Book) Chú ý rằng bạn vẫn phải cài đặt giao diện Printable và thực hiện page rendering trong phương thức print của page painter.

                          NHẬP MÔN LẬP TRÌNH TRÊN JAVA 3D

                          Các vấn đề cơ bản về Java 3D API™

                          Content tương ứng với những đối tượng quan sát trong một đồ thị khung cảnh.

                          Xây dựng đồ thị khung cảnh

                            Bạn có thể nghĩ cấu trúc xây dựng trong hình 1-3 định nghĩa 3 đối tượng quan sát trong một môi trường ảo, Nó xuất hiện trên biểu đồ khung cảnh dựa trên định nghĩa 2 đối tượng quan sát thông qua sử dụng đối tượng quan sát Shape3D phía bên phải của đồ thị. Lớp SimpleUniverse có một lớp thành viên là ViewingPlatform, lớp này có phương thức setNominalViewingTransform cho phép chuyển vị trí của mắt nhìn tới trung tâm là (0,0, 2.41) nhìn từ phía âm của trục z so với vị trí ban đầu.

                            Một vài thuật ngữ trong Java 3D

                            Chương trình Java 3D thông thường sẽ chuyển điểm nhìn ra phía sau (hướng dương của trục z) để làm cho đối tượng ở vị trí hoặc gần so với vị trí ban đầu giữa hướng nhìn. Trả về giá trị cờ chỉ ra khi nào node là một phần của đồ thị khung cảnh sống Chú ý rằng không có bước “bắt đầu dựng hình”cả trong công thức cơ bản lẫn công thức đơn giản đã nói ở trên.

                            Ví dụ đơn giản: HelloJava3Da

                            Trong ví dụ này lớp tiện ích ColorCube được tìm thấy trong gói com.sun.j3d.utils.geometry kết quả là hầu hết chương trình Java 3D đều có những câu lệnh để import các thư viện như hình 1-4, ngoại trừ lớp tiện ích ColorCube. Tạo đối tượng Transform3D mà đại diện cho ma trận ban đầu (không có biến đổi) Một đối tượng Transform3D có thể đại diện cho tịnh tiến, quay, biến hình theo quy mô,hoặc là kết hợp các phương pháp trên lại.

                            Quay hình lập phương

                              Trong trường hợp có nhiều phép biến hình đồng thời xảy ra, ở ví dụ của chúng ta là sẽ có 2 phép biến hình đồng thời, sẽ được chỉ trên một đối tượng quan sát duy nhất. 2 phép biến đổi có thể thông qua một ma trận biến đổi và được giữ bởi một đối tượng TransformGroup.

                              Khả năng và hoạt động

                                Như trong một ví dụ đã nói, để có thể đọc được giá trị biến hình đại diện cho một đối tương TransformGroup, thì các khả năng của nó phải được thiết lập trước khi hoặc nó được dịch hoặc trở nên sống. Muốn có điều này TransformGroup phải có tập khả năng ALLOW_TRANSFORM_WRITE trước khi nó được dịch hoặc sốngViệc điều khiển khẳ năng truy cập đến các lĩnh vực khác của đối tượng TransformGroup cũng như vậy.

                                Hình 1-16 dưới đây đưa ra một mô tả mới hiệu quả hơn.
                                Hình 1-16 dưới đây đưa ra một mô tả mới hiệu quả hơn.

                                Thêm vào các hành vi animation

                                  Một hành vi có thể thay đổi trên địa điểm (PositionInterpolator), hướng (RotationInterpolator), kích cỡ(ScaleInterpolator), màu sắc(ColorInterpolator) hoặc độ trong suốt(TransparencyInterpolator) của một đối tượng quan sát. Hàm khởi tạo này sử dụng các giá trị mặc định cho một vài tham số của hành vi mặc định để khởi tạo một phép quay đầy đủ trên trục y, bằng đối tượng TransformGroup được chỉ ra bằng hành vi mặc định.

                                  Đồ thị khung cảnh
                                  Đồ thị khung cảnh

                                  Visual Object Definition Basics

                                    Hàm tạo cho đối tượng Shape3D cho phép đối tượng Shape3D được tạo mà không cần tham chiếu của nút thành phần, hoặc chỉ với tham chiếu thành phần hình học, hoặc cả 2 dạng. Hàm tạo của VisualObject tạo đối tượng quan sát bằng cách tạp một đối tượng Shape3D tham chiếu đến NodeComponent được tạo bởi phương thức createGeometry()và createAppearance().

                                    Các lớp tiện ích hình học

                                      Lấy một trong những mặt Shape3D từ lớp cơ bản chứa hình học và bề mặt.Đối tượng Box, Cone, và Cylinder được tập hợp từ nhiều đối tượng Shape3D, với nút thành phần hình học của nó. Nhánh đồ tị này bắt đầu bằng đối tượng BranchGroup được tạo bơi ConeYoyo, đường của đồ thị khung cảnh tới mỗi đối tượng Cone bắt đầu bằng đối tượng TransformGroup chỉ ra phép dịch, theo đó là TransformGroup xác định phép quay và hủy đối tượng Cone.

                                      Hình học của nó. Giá trị đưa ra để xác định nút thành phần nào được lấy.
                                      Hình học của nó. Giá trị đưa ra để xác định nút thành phần nào được lấy.

                                      Các lớp toán học

                                        Đối tượng Point* thường được đại diện cho tọa độ của một đỉnh, chẳng hạn như một vạch quét ảnh, một điểm nguồn sáng, nguồn âm thanh và các dữ liệu điểm khác. Mỗi instance trong lớp Color* đại diện cho một màu đơn trong 3 thành phần đỏ, xanh lá cây và xanh nước biển (RGB), hoặc một trong bốn thành phần 3 màu và thêm độ alpha (RGBA).

                                        Các lớp hình học

                                          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. 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.

                                          Đồ thị khung cảnh được chỉ ra ở dưới đây:
                                          Đồ thị khung cảnh được chỉ ra ở dưới đây:

                                          Appearance and Attributes

                                            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(). Đối với các nguồn alpha đi vào , and alphaTestFunction là một trong những ALWAYS, NEVER, EQUAL, NOT_EQUAL, LESS, LESS_OR_EQUAL, GREATER, hoặc GREATER_OR_EQUAL, chỉ rừ loại alpha test nào được kớch hoạt.

                                            Bounds and Scope

                                              Bounds là lớp trừu tượng, do đó các phương thức liệt kê dưới đây là tất cả các phương thức trừu tượng và cụ thể của BoundingBox, BoundingPolytope, và BoundingSphere Bounds closestIntersection(Bounds[] boundsObjects). Khi các ứng dụng cho BoundingLeafa bao gồm ApplicationBounds của đối tượng Background, SchedulingBounds của Behaviors, và InfluencingBounds của Lights, không gây cảm giác lặp lại thông tin trên cả vùng.

                                              Hình học nâng cao

                                                Trong đoạn ma 2-13 được lấy từ chương trình TwistByRefApp.java, sử dụng tham chiếu đến dữ liệu hình học thay vì cách cũ, trong trường hợp này tạo độ và màu được người dùng tạo thành 2 mảng coord và color. Trong mỗi trường hợp phương thức sẽ đưa ra ngoại lệ nếu chế độ dữ liệu không chọn là BY_REFERENCE, trong một số trường hợp chế độ dữ liệu có thể là INTERLEAVED, trong một số trường hợp không được phép là INTERLEAVED.

                                                Clipping – Cắt xén

                                                  Khi giữa các nửa mặt cắt có giao nhau chúng định nghĩa một vùng mà các điểm trong đó không được dựng, dù chúng ở trong hình chóp cụt nhìn thấy. ALLOW_PLANE_READ | WRITE allow read (write) access to its planes at runtime ALLOW_SCOPE_READ | WRITE allow read (write) access to its scope information at.

                                                  TẠO NỘI DUNG

                                                  Nội dung chính

                                                    Khi sử dụng những lớp tiện ích này, chúng ta không cần quan tâm đến kiểu của GeometryInfo(POLYGON_ARRAY, QUAD_ARRAY, STRIP_ARRAY… ), khi đó các dữ liệu này được chuyển đổi thành các tam giác chỉ mục. Trên thực tế ngày cáng có nhiều các định dạng file 3D từ các ứng dụng khác nhau, công việc để load các file này không phải là công việc của Java3D hay của gói loaders, ma chỉ có phần giao diện dùng cho kỹ thuật loading được đưa vào.

                                                    Một ví dụ đơn giản sử dụng leader

                                                    Giao diện của gói Loader và lớp cơ sở

                                                    Khi chúng ta viết một lớp loader mới, chúng ta có thể thừa kế lại lớp loader cơ sở trong gói com.sun.j3d.loaders và sử dụng lớp SceneBase trong cùng gói này. Tuy nhiên việc nghiên cứu cách viết, làm việc cảu một Loader sẽ giỳp chỳng ta hiểu rừ hơn khi nào thỡ sử dụng loader, hiểu cỏch sử dụng GeometryInfo, hiểu được việc thực thi của ObjectLoader.

                                                    Công việc của một loader

                                                    Trong quá trình viết một loader mới chúng ta cần xem xét việc thừa kế lớp SceneBase hoặc thực thi interface Scene một cách trục tiếp. Khi thừa kế lớp loader cơ sở, công việc chú yếu của chúng ta là viết các phương thức để nhận ra format của file.

                                                    Hàm tạo lớp Loader

                                                    •Thể hiện đối tượng hình học một cách hiệu quả bằng việc phân nhỏ thành nhiều phần, hoặc sử dụng LOD. Nhiệm vụ chủ yếu của nó là tạo ra đối tướng hình học tương ứng với nội dung file được load vào.

                                                    Viết một File Loader đơn giản

                                                    Trong các phần tiếp theo chúng ta sẽ xem xét kỹ hơn ácc lớp này, thành phần và hoạt động của nó tỏng một ứng dụn loader. // Whitespace characters delineate words and numbers // blanks, tabs, and newlines are whitespace in OOGL whitespaceChars('\t', '\r'); // ht, lf, ff, vt, cr.