package models import ( "time" ) type Material struct { ID int64 `json:"id" gorm:"primaryKey;autoIncrement"` Name string `json:"name" gorm:"size:255;not null"` // 漫反射颜色 (Diffuse) DiffuseR float64 `json:"diffuse_r" gorm:"not null;default:0"` DiffuseG float64 `json:"diffuse_g" gorm:"not null;default:0"` DiffuseB float64 `json:"diffuse_b" gorm:"not null;default:0"` Alpha float64 `json:"alpha" gorm:"not null;default:1"` // 高光 (Specular) Shininess float64 `json:"shininess" gorm:"not null;default:0"` SpecularR float64 `json:"specular_r" gorm:"not null;default:0"` SpecularG float64 `json:"specular_g" gorm:"not null;default:0"` SpecularB float64 `json:"specular_b" gorm:"not null;default:0"` // 环境光 (Ambient) AmbientR float64 `json:"ambient_r" gorm:"not null;default:0"` AmbientG float64 `json:"ambient_g" gorm:"not null;default:0"` AmbientB float64 `json:"ambient_b" gorm:"not null;default:0"` // PBR属性 Metallic float64 `json:"metallic" gorm:"not null;default:0"` Roughness float64 `json:"roughness" gorm:"not null;default:0.5"` Reflectance float64 `json:"reflectance" gorm:"not null;default:0.5"` // 乐观锁版本号 (用于防止并发覆盖) Version int64 `json:"version" gorm:"not null;default:0"` CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"` UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"` } func (Material) TableName() string { return "materials" } // 创建/更新材质的请求结构 type MaterialRequest struct { Name string `json:"name" binding:"required"` DiffuseR float64 `json:"diffuse_r"` DiffuseG float64 `json:"diffuse_g"` DiffuseB float64 `json:"diffuse_b"` Alpha float64 `json:"alpha"` Shininess float64 `json:"shininess"` SpecularR float64 `json:"specular_r"` SpecularG float64 `json:"specular_g"` SpecularB float64 `json:"specular_b"` AmbientR float64 `json:"ambient_r"` AmbientG float64 `json:"ambient_g"` AmbientB float64 `json:"ambient_b"` Metallic float64 `json:"metallic"` Roughness float64 `json:"roughness"` Reflectance float64 `json:"reflectance"` } // 列表查询参数 type MaterialListQuery struct { Page int `form:"page,default=1"` PageSize int `form:"page_size,default=20"` Name string `form:"name"` }