lập trình đồ họa trên nền tảng ngôn ngữ lâp trình Java

304 2.1K 5
lập trình đồ họa trên nền tảng ngôn ngữ lâp trình Java

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

lập trình đồ họa trên nền tảng ngôn ngữ lâp trình Java

Lập trình đồ họa Java 2D 3D Phần Lập trình đồ họa với Java 2D Chương .9 Tổng quan Java 2D API 1.1 Enhanced Graphics, Text, and imaging 1.2 Rendering Model 10 1.2.1 Coordinate Systems 10 1.2.1.1 User Space 10 1.2.1.2 Device Space .10 1.2.2 Transforms 11 1.2.3 Fonts 11 1.2.4 Images 12 1.2.5 Fills and Strokes 13 1.2.6 Composites 13 Backward Compatibility and Platform independence 14 1.3.1 Backward Compatibility 14 1.3.2 Platform independence 15 1.4 The Java 2D™ API Packages 15 Chương 2: 18 Rendering with Graphics2D .18 2.1 Các lớp giao diện 18 2.2 Rendering Concepts 19 2.2.1 Rendering Process .19 2.2.2 Controlling Rendering Quality 20 2.2.3 Stroke Attributes 21 2.2.4 Fill Attributes .22 Quá trình xử lý theo phiên 22 2.2.5 Clipping Paths 23 2.2.6 Transformations 23 2.2.6.1 Constructing an AffineTransform .24 2.2.7 Composite Attributes 25 2.2.7.1 Managing Transparency 25 2.2.7.2 Transparency and images 26 2.3 Thiết lập Graphics2Context 26 2.3.1 Setting Rendering Hints 26 2.3.2 Specifying Stroke Attributes .26 2.3.2.1 Setting the Stroke Width 27 2.3.2.2 Specifying Join and Endcap Styles 27 2.3.2.3 Setting the Dashing Pattern .27 2.3.3 Specifying Fill Attributes 28 2.3.3.1 Filling a Shape with a Gradient 28 2.3.3.2 Filling a Shape with a Texture 28 2.3.4 Setting the Clipping Path 29 2.3.5 Setting the Graphics2D Transform 30 2.3.6 Specifying a Composition Style 31 2.3.6.1 Using the Source Over Compositing Rule 31 2.3.6.2 Increasing the Transparency of Composited Objects .31 2.4 Rendering Graphics Primitives 32 2.4.1 Drawing a Shape 32 2.4.2 Filling a Shape 33 Lập trình đồ họa Java 2D 3D 2.4.3 Rendering Text 34 2.4.4 Rendering images 34 2.5 Defining Custom Composition Rules .34 2.6 Rendering in a Multi-Screen Environment 34 Chương .42 Các đối tượng hình họa .42 3.1 Giao diện lớp 42 3.2 Các khái niệm hình học: 44 3.2.1 Constructive Area Geometry .44 3.2.2 Bounds and Hit Testing .44 3.3 Combining Areas to Create New Shapes 48 Chương 4: 51 Hiển thị Font văn .51 4.1.Giao diện lớp 51 4.2.Các khái niệm Font 52 4.3 Các khái niệm Text Layout 53 4.3.1 Vẽ chữ 53 4.3.2 Ordering Text .55 4.3.3 Đo định vị văn .56 4.3.4 Hỗ trợ thao tác với văn .56 4.3.4.1 Hiển thị dấu nhắc 56 4.3.4.2 Di chuyển dấu nhắc 57 4.3.4.3 Hit Testing 58 4.3.4.4 Đánh dấu vùng lựa chọn 59 4.3.5 Thực thi việc hiển thị văn ứng dụng Java™ .59 Quản lý việc hiển thị văn 60 4.4.1 Trình bày văn 61 Hiển thị dấu nhắc kép 61 4.4.3 Di chuyển dấu nhắc 62 4.4.4 Hit Testing 62 4.4.5 Đánh dấu vùng lựa chọn 62 4.4.6 Querying Layout Metrics 62 4.4.7 Vẽ văn nhiều dòng .63 Chương .67 Tạo ảnh 67 5.1 Các giao diện lớp 67 5.1.1 Các giao diện imaging (imaging interfaces) 67 5.1.2 Các lớp liệu ảnh(image Data Classes) 68 5.1.3 image Operation Classes 68 5.1.4 Sample Model Classes .69 Color Model Classes 70 5.1.6 Exception Classes 70 5.2 Immediate Mode imaging Concepts 71 5.2.1 Terminology 72 5.3 Using Bufferedimages 73 5.3.1 Creating a Bufferedimage 73 5.3.2 Drawing in an Offscreen Buffer 73 5.3.2.1 Creating an Offscreen Buffer 74 5.3.2.2 Drawing in an Offscreen Buffer 75 5.3.3 Manipulating Bufferedimage Data Directly .75 Lập trình đồ họa Java 2D 3D 5.3.4 Filtering a Bufferedimage 76 5.3.5 Rendering a Bufferedimage 76 5.4 Managing and Manipulating Rasters 79 5.4.1 Creating a Raster .79 5.4.2 Parent and Child Rasters 79 5.4.4 The WritableRaster Subclass .80 5.5 Image Data and DataBuffers 80 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 82 5.8.1 Using an image Processing Operation 83 Chương .86 Mầu sắc .86 6.1 Các lớp .86 6.2 Những định nghĩa mầu sắc 86 6.2.1 Không gian mầu 87 6.2.1 Biểu diễn màu 89 Chương 91 In ấn .91 7.1 Các giao diện lớp 91 7.2.1 Supporting Printing 92 7.2.1.1 Điều khiển in (Job Control) 92 7.2.2 Page Painters 93 7.2.3 Printable Jobs and Pageable Jobs 94 7.2.4 Typical Life-Cycle of a PrinterJob 94 7.3 Printing with Printables 96 7.3.2 Printing a File 97 7.4.1 Using a Pageable Job .100 7.4.2 Using Multiple Page Painters 101 Phần 107 Lập trình đồ họa với Java 3D .107 CHƯƠNG 108 NHẬP MƠN LẬP TRÌNH TRÊN JAVA 3D 108 1.1 Tổng quan Java 3D API ™ 108 1.2 Các vấn đề Java 3D API™ .108 1.3 Xây dựng đồ thị khung cảnh 109 1.3.1 Thừa kế cấp cao từ Java 3D API 112 1.4 Cách thức để viết chương trình Java 3D .113 1.4.1 Công thức đơn giản để viết chương trình Java 3D 113 1.5 Một vài thuật ngữ Java 3D .116 1.6 Ví dụ đơn giản: HelloJava3Da 117 1.6.1 Các lớp Java 3D Classes sử dụng HelloJava3Da 120 Tạo nên hình lập phương có kích thước định giá trị cho trước .123 1.7 Quay hình lập phương 123 1.7.1 Sự kết hợp phép biến hình: HelloJava3Db 124 1.8 Khả hoạt động 124 1.8.1 Dịch nội dung 125 1.8.2 Khả 125 1.9 Thêm vào hành vi animation 126 Lập trình đồ họa Java 2D 3D 1.9.1 Định nghĩa hành vi animation 127 1.9.2 Các hàm biến đổi thời gian: Ánh xạ hành vi với thời gian 127 1.9.3 Lập danh mục vùng 128 1.9.4 Ví dụ hành vi: HelloJava3Dc 129 1.9.5 Phép biến hình kết hợp hành vi Ví dụ: HelloJava3Dd 130 CHƯƠNG 133 Tạo hình 133 2.1 Hệ tọa độ giới ảo 133 2.2 Visual Object Definition Basics .133 2.2.1 An Instance of Shape3D Defines a Visual Object 134 2.2.2 Node Components 135 2.2.3 Defining Visual Object Classes .135 2.3 Các lớp tiện ích hình học 136 2.3.1 Box 137 2.3.2 Cone 137 2.3.3 Cylinder 138 2.3.4 Sphere 138 2.3.5 More About Geometric Primitives 139 2.3.6 ColorCube 139 2.3.7 Example: Creating a Simple Yo-Yo From Two Cones 139 2.4 Các lớp toán học .143 2.4.1 Point Classes 145 2.4.2 Color Classes 145 2.4.3 Vector Classes 146 2.4.4 TexCoord Classes 147 2.5 Các lớp hình học .147 2.5.1 GeometryArray Class .148 2.5.2 Subclasses of GeometryArray 152 2.5.3 Subclasses of GeometryStripArray 153 2.5.4 Subclasses of IndexedGeometryArray 157 2.5.5 Axis.java is an Example of IndexedGeometryArray .159 2.6 Appearance and Attributes .159 2.6.1 Appearance NodeComponent 160 2.6.2 Sharing NodeComponent Objects 160 2.6.3 Attribute Classes .161 2.6.4 Example: Back Face Culling 166 2.7 Bounds and Scope 171 2.7.1 Bounds Node Components .171 2.7.2 BoundingLeafa Node 174 2.7.3 Scope 175 2.8 Hình học nâng cao 176 2.8.1 Multiple Geometries in a Single Shape3D .176 2.8.2 GeometryArray 178 2.8.4 AlternateAppearance 181 2.9 Clipping – Cắt xén 183 2.9.1 View Defines a Frustum 183 2.9.2 Clip Node 185 2.9.4 ModelClip Example 185 CHƯƠNG 188 TẠO NỘI DUNG 188 Lập trình đồ họa Java 2D 3D 3.1 Nội dung .188 3.1.1 GeometryInfo 188 3.2.1 Một ví dụ đơn giản GeometryInfo 189 3.2.2 Sử dụng GeometryInfo 189 3.2.3 Một số lớp thơng dụng có liên quan đến GeometryInfo 190 Loaders 193 Một ví dụ đơn giản sử dụng leader 193 Các loader phổ biến .193 3.3.3 Giao diện gói Loader lớp sở 194 Viết loader .196 Công việc loader 196 Hàm tạo lớp Loader 197 Viết File Loader đơn giản 198 Text2D 203 3.5.1 Ví dụ Text2D đơn giản 204 3.5.2 Lớp Text2D .204 Text3D 205 Một ví dụ Text3D .206 Những lớp liên quan để tạo đối tượng Text3D 207 Nền không gian đồ họa 211 Một ví dụ background 211 Lớp Background .212 CHƯƠNG 214 TƯƠNG TÁC 214 4.1 Hành vi: Cơ sở tương tác hoạt hình 214 4.1.1 Ứng dụng hành vi .214 4.1.2 Tổng quan lớp Behaviour 215 4.2 Cơ hành vi 215 4.2.1 Viết lớp Behaviour 216 4.2.2 Sử dụng lớp Behaviour 218 4.2.3 Các hàm API lớp Behaviour 221 4.3 Điều kiện kích hoạt: Cách kích hoạt hành vi 222 4.3.1 Điều kiện kích hoạt 223 4.3.2 WakeupCriterion .223 4.3.3 Quy định lớp WakeupCriterion .224 4.3.4 Thành phần WakeupCondition 232 4.4 Lớp Behaviour tiện ích xử lý bàn phím 233 4.4.1 Một ví dụ đơn giản 233 4.4.2 Lớp KeyNavigatorBehaviour KeyNavigator 234 4.5 Lớp tiện ích tương tác với chuột 235 4.5.1 Sử dụng lớp MouseBehaviour 235 4.5.2 Mouse Behaviour Foundation 238 4.5.3 Các lớp MouseBehaviour 238 4.5.4 Mouse Navigation 240 4.6 Picking Object 241 4.6.1 Using Picking Utility Classes 244 4.6.2 Các hàm API lớp Picking .246 4.6.3 Các lớp picking 251 4.6.4 Các lớp Picking Behavior 253 CHƯƠNG 254 Lập trình đồ họa Java 2D 3D Hoạt Hình 254 Animation - Hoạt hình: 255 Đối tượng Interpolator Alpha với hoạt ảnh dựa thời gian .256 Alpha .256 Sử dụng đối tượng Interpolator Alpha: 258 Ví dụ sử dụng lớp Alpha RotationInterpolator: 258 Alpha API: 261 Các lớp hành vi Interpolator : .263 Core Interpolator API: 270 Các lớp đối tượng nội suy đường: 274 Lớp Billboard : 279 Sử dụng đối tượng Billboard 279 Chương trình ví dụ sử dụng Billboard 281 Giao diện lập trình ứng dụng Billboard (Billboard API) 283 OrientedShape3D 284 Giao diện lập trình ứng dụng OrientedShape3D 284 Ví dụ sử dụng OrientedShape3D 285 Hoạt ảnh mức chi tiết (Level Of Detail Animations) 286 Sử dụng đối tượng DistanceLOD 287 Các lỗi thường gặp sử dụng LOD .287 Ví dụ sử dụng DistanceLOD 287 Giao diện lập trình ứng dụng DistanceLOD API 290 Morph .291 Sử dụng đối tượng Morph .291 Ví dụ sử dụng Morph .292 Giao diện lập trình ứng dụng Morph API 295 Giao diện GeometryUpdater .296 Sử dụng GeometryUpdater 296 Chương trình ví dụ hệ thống phân tử đài phun nước sử dụng GeometryUpdater.296 Lời nói đầu Sự phát triển khoa học, kĩ thuật, nghệ thuật, kinh doanh, công nghệ luôn phụ thuộc vào khả truyền đạt thông tin chúng ta, thông qua bit liệu lưu trữ microchip thơng qua giao tiếp tiếng nói Câu châm ngơn từ xa xưa “một hình ảnh có giá trị vạn lời" hay "trăm nghe không thấy" cho thấy ý nghĩa lớn hình ảnh việc chuyển tải thơng tin Hình ảnh cảm nhận nhanh dễ dàng hơn, đặc biệt trường hợp bất đồng ngơn ngữ Do khơng có ngạc nhiên mà từ xuất máy tính, nhà nghiên cứu cố gắng sử dụng để phát sinh ảnh hình Trong suốt gần 50 năm phát triển máy tính, khả phát sinh hình ảnh máy tính đạt tới mức mà tất máy tính có khả đồ họa.Đồ họa máy tính lĩnh vực lí thú phát triển nhanh tin học Ngay từ xuất hiện, đồ họa máy tính có sức lôi mãnh liệt, hút nhiều người nhiều lĩnh vực khác khoa học, nghệ thuật, kinh doanh, quản lí, Tính hấp dẫn đa dạng đồ họa máy tính minh họa trực quan thông qua việc khảo sát ứng dụng Lập trình đồ họa Java 2D 3D Ngày nay, đồ họa máy tính sử dụng nhiều lĩnh vực khác cơng nghiệp, thương mại, quản lí, giáo dục, giải trí, … Số lượng chương trình đồ họa ứng dụng thật khổng lồ phát triển liên tục.Trong lĩnh vực công nghiệp,CAD(computer-aided design) sử dụng hầu hết việc thiết kế cao ốc, ô tô, máy bay, tàu thủy, tàu vũ trụ, máy tính,…Trong lĩnh vực giải trí,nghệ thuật, đồ họa máy tính giúp ta tạo chương trình trị chơi,các kĩ xảo điện ảnh cho nhà làm phim,hay giao diện đồ họa làm nâng cao khả giao tiếp người máy tính Để làm ứng dụng đồ họa hữu ích cho sống,trước hết cần phải có tảng vững lập trình đồ họa.Có nhiều ngơn ngữ hỗ trợ lập trình đồ họa máy tính,mỗi ngơn ngữ xây dưng thư viện đồ họa riêng,có mạnh riêng.Và nói lập trình đồ họa,chúng ta khơng thể khơng nói đến ngơn ngữ Java,một ngơn ngữ mạnh lĩnh vực này.Với mục đích nghiên cứu,tìm hiểu mang đến cho muốn tìm hiều lập trình đồ họa tài liệu thiết thực,nhóm chúng em chọn đề tài làm tutorial lập trình đồ họa tảng ngơn ngữ lâp trình Java,dựa tài liệu training mạng hãng Sun.Vì lần đầu làm tài liệu tham khảo nên chúng em khơng tránh khỏi sai sót.Chúng em mong thầy xem xét góp ý cho tài liệu này.Chúng em chân thành cảm ơn Lập trình đồ họa Java 2D 3D Phần Lập trình đồ họa với Java 2D Lập trình đồ họa Java 2D 3D Chương Tổng quan Java 2D API Java 2D™ API tăng cường khả đồ hoạ, văn ảnh Abstract Windowing Toolkit (AWT), giúp phát triển giao diện người sủ dụng ứng dụng JAVA số lĩnh vực mới.Cùng với khả mạnh đồ hoạ ,phông chữ ảnh API, Java 2D API cịn hỗ trợ thuộc tính thành phần màu sắc nâng cao, thành công việc biểu diễn bề mặt hình học tuỳ ý kiểu tô trát chuẩn cho máy in thiết bị hiển thị Java 2D API cho phép tạo thư viện đồ hoạ mở rộng,như thư viện CAD-CAM thư viện tạo hiệu ứng đặc biệt cho ảnh đồ hoạ, việc tạo lọc đọc/viết file ảnh đồ hoạ.Khi sử dụng kết hợp với Java Media Framework Java Media APIs khác ,thì Java 2D APIs sử dụng để tạo hiển thị thực ảo dạng đa phương tiện khác Java Animation Java Media Framework APIs dưa Java 2D API để hỗ trợ việc tô trát(rendering) 1.1 Enhanced Graphics, Text, and imaging Nếu phiên trước AWT cung cấp gói tơ trát(rendering) đơn giản phù hợp cho việc rendering trang HTML đơn giản,mà không đáp ứng đủ cho dạng đồ hoạ,văn ảnh phức tạp Thì Java 2D™ API cung cấp gói tơ trát đẩy đủ tính cách mở rộng AWT để hỗ trợ cho đồ hoạ thao tác rendering Ví dụ thơng qua lớp đồ hoạ cho phép vẽ hình chữ nhật,hình ơval,và đa giác Đồ hoạ 2D tăng cường khái niệm phép tơ trát hình học cách cung cấp chế cho phép rendering ảo bề mặt hình học nào.Tương tư với Java 2D API bạn vẽ dạng đường với độ rộng dạng hình học Dạng hình học cung cấp thơng qua phần thực thi implementations Shape interface Graphic class, hình chữ nhật 2D Elip 2D Các đường cong hình cung thuộc phần implementations Shape Các kiểu vẽ tô cung cấp thông qua phần thực thi implementations giao tiếp Paint Stroke interfaces, ví dụ BasicStroke, GradientPaint, TexturePaint,và Color AffineTransform định nghĩa phép biến đổi toạ độ chiều, gồm có phép lấy tỉ lệ,phép chuyển đổi toạ độ ,phép quay phép xén cắt Khung nhìn định nghĩa phương thức giống lớp Shape mà chúng dùng để định nghĩa khung nhìn chung,ví dụ Rectangle2D GeneralPath Thành phần màu sắc cung cấp phương thức lớp Composite, ví dụ AlphaComposite Một kiểu Font chữ định nghĩa collection Glyphs Lập trình đồ họa Java 2D 3D 1.2 Rendering Model Kiểu tô trát đồ họa đơn giản khơng có thay đổi thêm vào Java 2D™ APIs Để tô trát đồ họa phải thiết lập thơng số đồ họa gọi phương thức đối tượng Graphics Trong Java 2D API, lớp Graphics2D mở rộng lớp Graphics để hỗ trợ thêm nhiều thuộc tính đồ họa cung cấp thêm phương thức cho q trình tơ trát The Java 2D API tự động cân chỉnh sai khác thiết bị tô trát cung cấp kiểu tô trát thống cho dạng thiết bị khác Tại tầng ứng dụng,q trình tơ trát giống cho dù thiết bị cuối hình hay máy in Với Java SDK, version 1.3 , Java 2D API cịn hỗ trợp cho mơi trường đa hình (multi-screen environments) 1.2.1 Coordinate Systems Java 2D API bao hàm hai hệ tọa độ: Không gian người sủ dụng hệ tọa độ logic độc lập với thiết bị Các ứng dụng thường sủ dụng hệ tọa độ này,tất dạng hình học tô trát Java 2D xác định hệ tọa độ Không gian thiết bị hệ tọa độ phụ thuộc thiết bị,ứng với loại thiết bị cuối mà có hệ tạo độ khác Bằng ứng dụng máy ảo cửa sổ hiển thị mở rộng thêm nhiều thiết bị hiển thị lý tạo nên môi trường đa hiển thị, hệ tọa độ thiết bị sủ dụng làm hệ tọa độ máy ảo lấy làm hệ tọa độ cho tất hiể thị lại Hệ thống Java 2D tự động thực phép chuyển đổi cần thiết không gian người sử dụng không gian thiết bị Mặc dù hệ tọa độ cho hình khác hệ tọa độ cho máy in khác biệt suốt ứng dụng 1.2.1.1 User Space Hệ tọa độ hình 1-1 x (0,0) y Figure 1-1 User Space Coordinate System Không gian người sử dụng biểu diễn cách trừu tượng đồng cho hệ tạo độ tất thiết bị có liên quan.Cịn không gian thiết bị cho thiết bị cụ thể có gốc tọa độ hướng trục khơng.Ngồi tọa độ khơng gian người sử dụng chuyển đổi cách tự động vào không gian thiết bị phù hợp đối tượng đồ họa tơ trát,thường chương trình driver thiết bị thực điều 1.2.1.2 Device Space 10 Lập trình đồ họa Java 2D 3D Hình 5-20 hai cảnh sinh từ chương trình DistanceLODApp Mỗi ảnh có khối cầu tĩnh khối cầu dịch chuyển (trong hình bên phải, khối cầu bên trái bị che khuất) Khối cầu dịch chuyển biểu diễn đối tượng DistanceLOD với khối cầu có độ phức tạp hình học khác Khối cầu nhỏ màu xanh khối cầu chi tiết sử dụng đối tượng DistanceLOD khoảng cách cực đại Khối cầu lớn màu đỏ khối cầu chi tiết đối tượng DistanceLOD khoảng cách cực tiểu Hai khối cầu hiển thị để làm mốc so sánh Trong chương trình này, đối tượng DistanceLOD biểu diễn khối cầu có màu sắc khác để minh họa trình chuyển đổi Một đối tượng nội suy vị trí PositionInterpolator sử dụng để dịch chuyển đối tượng DistanceLOD theo hướng vng góc với hình Khi đối tượng DistanceLOD dịch chuyển xa người quan sát, chuyển đối tượng trực quan để hiển thị Nếu không sử dụng khối cầu có màu sắc khác khó khăn để nhận biết đối tượng trực quan chuyển Hình 5-20 Hai cảnh sinh từ DistanceLODApp Giao diện lập trình ứng dụng DistanceLOD API DistanceLOD định nghĩa nút đối tượng hành vi LOD dựa khoảng cách, hoạt động nút nhóm Switch để lựa chọn số nút Switch dựa vào khoảng cách nút đối tượng LOD so với người quan sát Một mảng n giá trị khoảng cách đơn điệu tăng, xác định cho thành phần distances[0] tương ứng với mức chi tiết cao thành phần cuối distances[n-1] tương ứng với mức chi tiết thấp Dựa vào khoảng cách thực từ người quan sát đến nút DistanceLOD, n giá trị khoảng cách [0, n-1] lựa chọn n+1 mức chi tiết [0, n] Nếu gọi khoảng cách từ người quan sát đến nút LOD phương trình để xác định mức chi tiết (con nút Switch) lựa chọn là: d

Ngày đăng: 01/08/2013, 10:18

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan